预解析:把变量的定义(仅仅是定义)提升到作用域的最顶上
预:事先
通俗的意思就是先解析再运行我们所需要的代码。
有范围的区分
作用域:
<script>
Function show(){
Var a = 12;
}
Alert(a);
</script>
注意:ReferenceError: a is not defined 程序会报错
Script
<script>
Var a = 12;
</script>
<script>
Alert(a);
</script>
输出:12
<script>
alert(a);
</script>
<script>
var a = 12;
</script>
报错:ReferenceError: a is not defined
1 变量不带var 不会预解析
<script>
alert(a);
a = 12;
</script>
报错:ReferenceError: a is not defined
<script>
alert(a);
var a = 12;
</script>
输出:undefined
2 等号后面的不会预解析
var show = function show()
{
alert('1');
}
alert(show());
输出:1;
输出:undefined.
var show = function show()
{
alert('1');
}
alert(show);
输出:function show()
{
alert('1');
}
alert(show());
var show = function show()
{
alert('1');
}
报错:TypeError: undefined is not a function
3 return 后面的值不会预解析
function test(){
aaa();
return function aaa(){
alert(1);
}
}
test();
报错: ReferenceError: aaa is not defined
4 return后面的代码会预解析
function show(){
alert(a);
return 12;
var a = 12;
}
show();
输出:undefined
5 变量不会重复定义
<script>
var a = 12;
var a;
alert(a);
输出:12
6 封闭空间的函数不会预解析
(function show(){
alert(1);
})();
alert(show);
输出:1;
报错:ReferenceError: show is not defined