js的预解析

1,js是顺序执行的,下面这个大家肯定没有异议 


test();// 哈哈
function test(){
alert(
"哈哈");
}
但是在C语言中,这样就不行了,C语言要求函数必须先声明后调用,那是什么原因让js有如此能力先调用而后声明了?ok,这说明js肯定是在调用函数之前就将函数放入内存中了,这种简单的机制就是我们今天要说的---js预解析

2,变量的预解析,看如下代码
alert(a);//undefined

var a="test";

和函数声明一样,变量的声明也会在一开始就被放入内存中了,但是并没有赋值,所以在它赋值之前,它的值就是undefined;

3,变量和函数重名,看如下代码

alert(a); //function(){ return  "function"} 

var a="var";

function a(){ return "function" }
alert(a); // var
 

这个就说明了,重名时,函数名优先级高于变量名

 4,js的预解析是在程序进入一个新的环境时,把该环境里的变量或函数预解析到它们能调用的环境中。即每一次预解析的单位是一个执行环境。代码如下

function a(){
     var b="function"
}

alert(b);//报错   b is not  defined

 此外,如果预解析不会跨<script>去解析,如下:

<script type="text/javascript">
alert(b);//报错
</script>

<script type="text/javascript">
var b=1;
</script>

 

 

 

 

posted on 2014-03-26 19:15  wenber  阅读(2295)  评论(3编辑  收藏  举报

导航