在 ECMAScript / Javascript 6 中 class 附近是否需要 IIFE?
Is an IIFE required around class in ECMAScript / Javascript 6?
如果我有
Class Car {}
我需要用我们的函数闭包来包装它吗? var 是否被提升到 window?或者只是到 class?转译时呢? Traceur/babel 是否将其转换为 IIFE 并让我们转换为 var?
我需要:
(function(){
Class Car() {}
}());
为了安全?
不,只要它在被视为 ES6 模块的代码中,就没有必要像这样包装它。 Babel 的默认设置将输入代码和文件视为模块。 Babel 确实在各个地方引入了函数来实现正确的作用域语义,并且如果启用了适用的转换器,它会将 let
转换为 var
。
ES6 模块始终处于严格模式,以下是规范中关于严格模式下赋值的内容:
Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its LeftHandSide must not evaluate to an unresolvable Reference.
http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-of-ecmascript
你到底是什么意思?:
Do var's get hoisted to [...] the class?
你可以看看当 Babel 转译你的代码时会发生什么 here
你不需要使用 IIFE,除非你想隐藏 class,并且生成的 var Class
被提升为任何变量:声明将在开始时进行, 但分配将在原始行中进行。
是的,Babel 将 let
变成了 var
,但它还通过额外的分配来确保作用域的正常工作。如果你只想编写 ES6 代码并执行它,你不必担心这些细节,只需遵循 ES6 (ES2015) 标准即可。
class 汽车不需要 IIFE 包装器,如此处所示,事实上,这将创建一个执行上下文并从页面的其余部分隐藏 class。
所以您只需将其保留为(不是小写)
class Car(){}
Var 仍然以与之前相同的方式被提升。它将被提升到执行上下文的顶部。如果代码当前在 window 的上下文中,那么这就是 var 结束的地方。
类 not 在 ECMAScript 6 中提升。因此 class 只有在声明后才可用。
如果我有
Class Car {}
我需要用我们的函数闭包来包装它吗? var 是否被提升到 window?或者只是到 class?转译时呢? Traceur/babel 是否将其转换为 IIFE 并让我们转换为 var?
我需要:
(function(){
Class Car() {}
}());
为了安全?
不,只要它在被视为 ES6 模块的代码中,就没有必要像这样包装它。 Babel 的默认设置将输入代码和文件视为模块。 Babel 确实在各个地方引入了函数来实现正确的作用域语义,并且如果启用了适用的转换器,它会将 let
转换为 var
。
ES6 模块始终处于严格模式,以下是规范中关于严格模式下赋值的内容:
Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its LeftHandSide must not evaluate to an unresolvable Reference.
http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-of-ecmascript
你到底是什么意思?:
Do var's get hoisted to [...] the class?
你可以看看当 Babel 转译你的代码时会发生什么 here
你不需要使用 IIFE,除非你想隐藏 class,并且生成的 var Class
被提升为任何变量:声明将在开始时进行, 但分配将在原始行中进行。
是的,Babel 将 let
变成了 var
,但它还通过额外的分配来确保作用域的正常工作。如果你只想编写 ES6 代码并执行它,你不必担心这些细节,只需遵循 ES6 (ES2015) 标准即可。
class 汽车不需要 IIFE 包装器,如此处所示,事实上,这将创建一个执行上下文并从页面的其余部分隐藏 class。
所以您只需将其保留为(不是小写)
class Car(){}
Var 仍然以与之前相同的方式被提升。它将被提升到执行上下文的顶部。如果代码当前在 window 的上下文中,那么这就是 var 结束的地方。
类 not 在 ECMAScript 6 中提升。因此 class 只有在声明后才可用。