变量提升
在ES6之前,JS没有块级作用域,只有全局作用域和函数作用域(局部作用域)。
变量提升:就是将变量声明提升到它所在的作用域的最顶端
console.log(a) //undefined var a = 1; console.log(a) //1 function fn(){ console.log(b) //undefined var b = 2; console.log(b) //2 } fn() //实际上上面的代码是按照以下顺序执行的 var a; console.log(a) a = 1; console.log(a) function fn(){ var b; console.log(b) b = 2 console.log(b) } fn()
函数提升
在JS中创建函数有两种方式:声明式和表达式。只有声明式才存在函数提升。
console.log(fn1) //function fn1(){} console.log(fn2) //undefined function fn1(){} var fn2 = function(){} //实际上 以上代码是按照以下顺序执行的 function fn1(){} console.log(fn1) console.log(fn2) var fn2 = function(){}