预解析详解

预解析:把变量的定义(仅仅是定义)提升到作用域的最顶上

预:事先

通俗的意思就是先解析再运行我们所需要的代码。

有范围的区分

  1. 作用域:

<script>

Function show(){

  Var a = 12;

}

Alert(a);

</script>

注意:ReferenceError: a is not defined   程序会报错

  1. 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);


</script>

输出:12


6 封闭空间的函数不会预解析

 

(function show(){
alert(1);
})();


alert(show);

输出:1;

报错:ReferenceError: show is not defined

 

posted on 2015-05-25 12:07  潇湘水  阅读(174)  评论(0编辑  收藏  举报

导航