js解析过程:
-
预解析
预解析过程先按作用域将var定义的变量全部赋值为undefined,定义的函数原封不动拿出来:alert(t) var t1=1; function fn(){ var t2="xiaohong"; } // 预解析: // window作用域: // var t1=undefined; // function fn(){ // var t2="xiaohong"; // } // fn作用域: // var t2=undefined;
-
逐行代码执行
预解析完成之后才会逐行执行代码,因此,如果在变量定义之前使用该变量,程序不会报错,此时变量的值是undefined。alert(t1) var t1=1; function fn(){ var t2="xiaohong"; } //弹出undefined
函数定义在使用之后,也不会影响程序执行:
fn(); var t1=1; function fn(){ var t2="xiaohong"; alert(t2) }