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

Lex*_*wer 2 javascript ecmascript-6

过去我用过

var App = App || {};
Run Code Online (Sandbox Code Playgroud)

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

但是,使用letconst不是var抛出引用错误:

const App = App || {}; // or let App = App || {};

Uncaught ReferenceError: App is not defined
at <anonymous>:1:11
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?如果我想继续使用这种模式,我是否必须坚持var

the*_*ian 7

这是因为当您使用let或常量声明变量时,变量在初始化之前处于时间死区.

换句话说,尝试let foo = foo将抛出错误,因为foo仍然在时间死区,并且不能使用.同样的道理const.

还请注意,变量定义均可进行let或与定义的常数const不能与另一个变量相同的范围内共享其名字空间,无论是let,const,或var.