繁体   English   中英

ECMAScript / Javascript 6中的类周围是否需要IIFE?

[英]Is an IIFE required around class in ECMAScript / Javascript 6?

如果我有

Class Car {}

我需要用函数闭包将其包装起来吗? var吊到窗户了吗? 还是只是上课? 编译时怎么样? Traceur / babel是否将其转换为IIFE,然后转换为var?

我需要:

(function(){ 
    Class Car() {}
}());

为了安全起见?

此处所示的类汽车不需要IIFE包装器,实际上,它将创建执行上下文并在页面的其余部分隐藏该类。

因此,您只需将其保留为(而不是小写)

class Car(){}

Var仍以以前的方式悬挂。 它将被提升到执行上下文的顶部。 如果代码当前在窗口的上下文中,则该变量将在此结束。

ECMAScript 6中悬挂类。因此,只有在声明该类之后,该类才可用。

您可以看看Babel 在这里转换代码时会发生什么

除非要隐藏该类,否则不需要使用IIFE,并且将生成的var Class提升为任何变量:声明将在开始时进行,但赋值将在原始行中进行。

是的,Babel将let变成了var ,但是它也需要注意额外分配的范围界定工作。 如果您只想编写和执行ES6代码,则不必担心这些细节,只需遵循ES6(ES2015)标准。

不,只要将其作为ES6模块视为代码中的代码,就不需要像这样包装它。 Babel的默认设置将输入代码和文件视为模块。 Babel确实在各个地方引入了函数来实现正确的作用域语义,并且在启用了适用的转换器的情况下,确实将let转换为var

ES6模块始终处于严格模式下,这是规范中关于严格模式下分配的内容:

分配给未声明的标识符或其他无法解析的引用不会在全局对象中创建属性。 当在严格模式代码内进行简单分配时,其LeftHandSide不得求值为无法解析的引用。

http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-of-ecmascript

您到底是什么意思?:

var是否要上课?

暂无
暂无

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

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