Sym - 一个用 Java 实现的现代化社区平台 • 源码注册

Pipe - 小而美的开源博客平台 • 体验皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

变量提升

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 中的 letconst 不存在提升
    const foobar = () => {
      console.log(foo)
      let foo = 2
    }
    foobar()  // Uncaught ReferenceError: foo is not defined

返回总目录

每天 30 秒


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步