簡體   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