Skip to main content

变量声明提升

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部,且赋值会被留在原地,这个过程称之为提升。

函数提升

say() //输出:'saying'

function say() {
console.log('saying')
}

变量提升

var name = 'ryan'

function say() {
var name //变量name声明提升至作用域顶部,但未赋值,故为undefined
console.log(name) //存在局部name,则无视全局name
name = 'zoe' //变量赋值保持原位
console.log(name) //输出:'zoe'
}

say()

let 与 var 的区别?(4)

  • let 不存在变量提升现象,而 var 存在变量提升
  • let 声明的变量在块级作用域内,var 声明的变量只能是全局或者整个函数块的
  • let 不可以重复声明,而 var 可以重复声明
  • 暂时性死区 创建、初始化、赋值,var 是创建后立即初始化为 undefined,let 是创建后等赋值时初始化,未初始化就使用就会报错

参考文章

https://zhuanlan.zhihu.com/p/28140450)