🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

变量提升

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 秒


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

推荐阅读
留下你的脚步