繁体   English   中英

为什么const app = App || {}; 工作但使用var呢?

[英]Why doesn't const App = App || {}; work but using var does?

过去我用过

var App = App || {};

在分别加载到浏览器中的各种js脚本中分配或实例化公共App对象。

但是,使用letconst而不是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不能与其他变量相同的范围内分享它的名字空间,无论是letconst ,或var

当javascript引擎看到语句时, var App = App || {} var App = App || {} ,它将语句分解如下:

var App;
App = App || {};

由于可变提升, var App = App || {} var App = App || {}分为两部分。

  1. 声明: var App
  2. 作业: App = App || {} App = App || {}

另一方面, letconst声明不涉及变量提升。 因此, ReferenceError ,因为还没有名为App的变量。

var的行为与letconst不同。

var情况下,JS引擎首先创建变量定义,为它们分配内存空间并使用undefined值初始化它们。 只有这样它才能逐行开始执行代码。

letconst情况下,它仅在声明实际发生时(并且仅在没有立即赋值时)将其初始化为undefined

在您的示例中,变量App仍处于Temporal Dead Zone中,并且在该点尝试访问它会导致参考错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM