[英]Why doesn't const App = App || {}; work but using var does?
过去我用过
var App = App || {};
在分别加载到浏览器中的各种js脚本中分配或实例化公共App对象。
但是,使用let
和const
而不是var
会引发引用错误:
const App = App || {}; // or let App = App || {};
Uncaught ReferenceError: App is not defined
at <anonymous>:1:11
这里发生了什么? 如果我想继续使用这种模式,我是否必须坚持使用var
?
这是因为当您使用let
或常量声明变量时,变量在初始化之前处于时间死区 。
换句话说,尝试let foo = foo
会抛出错误,因为foo
仍处于暂时死区,并且无法使用。 const
。
还需要注意的是定义的变量蒙山let
或定义的常数const
不能与其他变量相同的范围内分享它的名字空间,无论是let
, const
,或var
。
当javascript引擎看到语句时, var App = App || {}
var App = App || {}
,它将语句分解如下:
var App;
App = App || {};
由于可变提升, var App = App || {}
var App = App || {}
分为两部分。
var App
App = App || {}
App = App || {}
另一方面, let
和const
声明不涉及变量提升。 因此, ReferenceError
,因为还没有名为App的变量。
var
的行为与let
或const
不同。
在var
情况下,JS引擎首先创建变量定义,为它们分配内存空间并使用undefined
值初始化它们。 只有这样它才能逐行开始执行代码。
在let
或const
情况下,它仅在声明实际发生时(并且仅在没有立即赋值时)将其初始化为undefined
。
在您的示例中,变量App
仍处于Temporal Dead Zone中,并且在该点尝试访问它会导致参考错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.