1、什么是JS预解析
JS代码是由浏览器的JS解析器来执行的,JS解析器在执行JS代码的步骤:预解析和代码执行
预解析:JS解析器将JS里面的 var 变量 和 function 提升到所在作用域的最前面,也就是变量提升和函数提升(let声明没有变量提升)
代码执行:从上往下执行代码
2、具体说说预解析
变量提升:把所有的变量声明提升到它的作用域的最前面,注意只提示变量声明,如果该变量已被赋值,那么它的值不会被一起提升
console.log(num); //会输出 undefind
var num = 1;
//经过预解析,上面两行代码相当于以下面的形式执行
//var num
//console.log(num); 此时输出的num并没有值
//num = 1;
//也就是说如果要输出num,那只能把console语句写在var num = 1下面
函数提升:把所有的函数声明提升到它的作用域的最前面,在当前作用域任何地方都能调用该函数
test(2); //这里可以输出2
function test(num) {
console.log(num);
}
test(3); //这里会输出3
注意:如果是以函数表达式的形式创建函数的话,遵循和变量预解析的规则
相关资源:函数表达式和函数声明有什么区别?
个人学习笔记,如有差误欢迎指正