在分析问题时,一定要先考虑预解析!!!
js引擎运行js时,分为两步:预解析和代码执行 预解析:js引擎会把js里面所有的var,还有function提升到当前作用域的最前面代码执行:按照代码书写顺序从上往下执行2.预解析分为变量预解析(变量提升)和函数预解析(函数提升)
变量提升:就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作。例题1:
console.log(num); //输出undefined var num = 10; 此代码块相当于执行以下代码: var num; console.log(num); // 因此输出undefined num = 10;例题2:
fun(); var fun = function(){ console.log(22); //报错 } 此代码块相当于执行以下代码: var fun; fun(); fun = function(){ console.log(22); }故函数表达式调用时必须要写在函数表达式的下面。
函数提升:就是把所有的函数声明提升到当前作用域的最前面,不调用函数。预解析例题:请输出结果?
var num = 10; fun(); function fun(){ console.log(num); var num = 20; } 此代码块相当于执行以下代码: var num; function fun(){ var num; console.log(num); //输出undefined num = 20; } num = 10; fun();注意:
var a = b = c = 9; 相当于 var a = 9 ;b = 9 ; c = 9 ;此时b和c没有var声明,直接赋值,属于全局变量集体声明: var a = 9,b = 9, c = 9; 用逗号分隔