2019-01-19
问题
下列代码会输出什么?
var foo = 1
var foobar = () => {
console.log(foo)
var foo = 2
}
foobar()
回答
由于变量提升(Hoisting),局部变量 foo
将会在调用 console.log
方法之前进行声明。也就是说,作为参数传递给 console.log()
的局部变量 foo
替代了在函数外部声明的全局变量。但是变量初始化(赋值)并不会被提升,因此输出为 undefined
,而不是 2
。
加分回答
- JavaScript 只会将声明提升,初始化并不会被提升
- 提升指变量和函数声明在编译阶段被放入内存中,在代码中的位置并不会变动
- ES6 中的
let
、const
不存在提升
const foobar = () => {
console.log(foo)
let foo = 2
}
foobar() // Uncaught ReferenceError: foo is not defined
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于