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>