预解析
JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程:
- 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
- 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
- 先提升var,在提升function。
变量提升
-
变量提升
定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。
-
函数提升
JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
JavaScript的执行过程
// 案例1
console.log(num)
num = 1000
//报错,num undefined
// 案例2
fn()
function fn(){
console.log("hello");
}
//输出hello
//案例3
var foo = 100
function abc(){
console.log(foo)
var foo =120
}
abc()
//输出undefined
//先在自己的作用域里找