ES6新增的let和const关键字不存在提升的现象,会报出异常 ReferenceError
变量提升
js引擎预编译期间会将变量声明提升至当前作用域的最顶端。
console.log(a) // undefined
var a = 1
console.log(a) // 1
var fn = function () {
console.log(b) // undefined
var b = 2
console.log(b) // 2
}
fn()
函数提升
js引擎预编译期间会将函数声明提升至当前作用域的最顶端,但不会提升函数表达式。
console.log(fn) // [Function fn]
fn() // fn
function fn () {
console.log('fn')
}
fn() // fn
console.log(fn2) // undefined
fn2() // fn2 is not a function
var fn2 = function () {
console.log('fn2')
}
fn2() // fn2
var a = 1
function fn () {
a = 10
console.log(a) // 10
return
function a () {}
}
fn()
console.log(a) // 1
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
var a = 1
function foo() {
var a = function () {}
a = 10
console.log(a)
return
}
foo()
console.log(a)
网友评论