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 

 

posted @ 2020-08-03 21:08  MIKE-CHOW  阅读(116)  评论(0)    收藏  举报