gpt4 book ai didi

javascript - 为什么 JavaScript 的空合并运算符 (||) 不适用于 es6 变量 (let/const)?

转载 作者:行者123 更新时间:2023-11-30 07:07:27 25 4
gpt4 key购买 nike

为什么 var APP = APP || {}; 工作正常,但是 const APP = APP || {}; 不是吗?或者 让 APP = APP || {} 就此而言。

Uncaught ReferenceError: APP is not defined

因为这只与APP的评估有关,与它的设置无关。

最佳答案

Why does var APP = APP || {}; work fine, but const APP = APP || {}; not?

让我们阐明如何评估这些语句。在执行任何代码之前,运行时会查找所有变量声明并在当前范围内为每个声明创建一个条目。一段时间后 APP = APP || {} 被执行,APP 的值在被赋值之前被读取。

它与 var 一起“工作”,因为 var 声明是隐式用值 undefined 初始化的。因此,在为其赋值之前访问该变量将返回 undefined

然而,

constlet 声明未初始化。在为它们分配初始声明的值之前,您无法访问它们。这也称为 temporal dead zone或简称 TDZ

这是一个简化的例子:

console.log(foo); // undefined
var foo = 42;
console.log(foo); // 42

对比

console.log(foo); // ReferenceError because of TDZ
let foo = 42;
console.log(foo); // 42 in theory, but this line is never executed due to the error above

关于javascript - 为什么 JavaScript 的空合并运算符 (||) 不适用于 es6 变量 (let/const)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com