Open xinbaihui opened 5 years ago
在被问到var和let的区别时,我通常说var有变量提升,let没有。 其实这样并不准确,确切的说let也有变量提升,用一个例子来证明这个观点。
let name = 'Baihui' { console.log(name) let name = 'Ella' }
如果不存在变量提升,应该输出Baihui,但是却抛出ReferenceError。 let也存在变量提升,但是它存在一个“临时死区”,在变量未初始化或赋值前不允许访问。
那么在非“临时死区”访问呢:
// console.log(name) // 临时死区 let name console.log(name)
在 非“临时死区”,如果let定义的变量未被赋值, 此时变量的值是undefined,相当于let 声明时初始化为undefined了,但是没有被提升。
变量的赋值分为三个阶段:
关于let、var和function:
参考:https://github.com/lydiahallie/javascript-questions
在被问到var和let的区别时,我通常说var有变量提升,let没有。 其实这样并不准确,确切的说let也有变量提升,用一个例子来证明这个观点。
Answer
Uncaught ReferenceError: name is not defined如果不存在变量提升,应该输出Baihui,但是却抛出ReferenceError。 let也存在变量提升,但是它存在一个“临时死区”,在变量未初始化或赋值前不允许访问。
那么在非“临时死区”访问呢:
Answer
undefined在 非“临时死区”,如果let定义的变量未被赋值, 此时变量的值是undefined,相当于let 声明时初始化为undefined了,但是没有被提升。
变量的赋值分为三个阶段:
关于let、var和function:
参考:https://github.com/lydiahallie/javascript-questions