script 全局变量,全局函数
自上而下
函数
由里到外
"JS的解析器":
1)“找一些东西”:var function 参数
var a=未定义 =>所有的变量,在预解析时,赋一个值:未定义
fn1 = function fn1(){alert(2)} =>所有的函数,在预解析时,是整个函数块
function fn1(n1) {} =>这里的参数n1,相当于var n1 ,因此也是未定义
在预解析时,遇到重名的:只留一个,var和函数重名,只留函数,函数重名,只留后面的一个,例如:
var a
function a(){alert(1);}
var a
function a(){alert(2);} =>预解析,a = function a(){alert(2);}
var a
2)“逐行解读代码”
表达式:= + - * / % ++ -- ! 参数 ...
表达式可以修改预解析的值!
FF 不能对if ,for里面的函数进行预解析,例如:
alert(fn1);
if (true) {
function fn1(){
alert(123);
}
}
FF => fn1 is not defined
其他浏览器 => function fn1(){
alert(123);
}
尽量避免在for、if中定义变量或者函数。