js的预解析
JS的解析过程分为两个阶段:预编译期(预处理、预解析、预编译)与执行期。
js代码在执行前会将作用域内的变量以及函数提升到到当前作用域的最前面,示例如下
变量名与函数名不同,var声明的变量赋值为undefined,函数赋值给函数名
console.log(a) var a=10; function fn(){ console.log(10) } console.log(fn)
以上代码预解析以后等同于
var a = undefined var fn=function(){ console.log(10) } console.log(a) //=>undefined var a = 10 //a被重新赋值为10 console.log(fn) //=>function fn(){console.log(10)}
如果变量和函数名同名,函数优先,var声明的变量会被覆盖
console.log(a) var a=10; function a(){ console.log(10) } console.log(a)
以上代码预解析以后等同于
var a = function(){ console.log(10) } console.log(a) //=>function a(){console.log(10)} var a = 10 //a被重新赋值为10 console.log(a) //10
浙公网安备 33010602011771号