变量声明是否成为ecmascript 6模块中窗口的属性?

时间:2014-09-12 19:41:42

标签: javascript module ecmascript-6

在ECMAScript 5及以下版本中,脚本顶层的var声明变为全局变量,也就是全局对象的属性(浏览器中为window)。在ECMAScript 6中,我们现在有模块。模块处于严格模式,因此我们不会通过忘记var自动创建全局,但如果我在模块的顶层声明var,它是否成为{的全局属性{1}}对象?如果我使用windowlet或ES6中添加的任何新声明表单会怎样?

const

1 个答案:

答案 0 :(得分:2)

  

但是如果我在模块的顶层声明一个var,它会成为窗口对象的全局属性吗?如果我在es6中添加let或const或任何新的声明表单怎么办?

在这两种情况下答案都是否定的。仅为脚本(第CanDeclareGlobalVar部分)的声明创建全局属性(如果15.1.8返回true)。但模块中的VarDeclaredNamesVarScopedDeclarations都属于该模块(确切地说是ModuleItem) - 而不是整个脚本。

无论如何,在模块中封装数据的整个想法(以便每个模块通过已建立的export/import例程与应用程序的其余部分进行通信)都会被浪费掉。