es6的class沒有變數提升。在es5中class存在變數提升,可以先使用再定義類,而在es6中,不會把類的聲明提升到頭部,先使用在定義的話會產生報錯,因此不能先使用再定義,es6的class也就沒有變數提升。
本文操作環境:windows10系統、Vue2.9.6版,DELL G3電腦。
class不存在變數提升
因為ES6不會把類別的宣告提升到程式碼頭部,所以需要先定義再使用。
但是ES5就不一樣,ES5存在變數提升,可以先使用,然後再定義。
// ES5可以先使用再定义,存在变量提升 new A(); function A(){ } // ES6不能先使用再定义,不存在变量提升 会报错 new B(); // B is not defined class B{ }
類別不存在變數提升(hoist),這一點與 ES5 完全不同。
new Foo(); // ReferenceError class Foo {}
上面程式碼中,ES6 Foo類別使用在前,定義在後,這樣會報錯,因為 ES6 不會把類別的宣告提升到程式碼頭部。這種規定的原因與下文要提到的繼承有關,必須確保子類別在父類別之後定義。
{ let Foo = class {}; class Bar extends Foo { } }
上面的程式碼不會報錯,因為Bar繼承Foo的時候,Foo已經有定義了。但是,如果有class的提升,上面程式碼就會報錯,因為class會被提升到程式碼頭部,而let指令是不提升的,所以導致Bar繼承Foo的時候,Foo還沒定義。
【相關推薦:《vue.js教學》】
以上是es6的class有沒有變數提升的詳細內容。更多資訊請關注PHP中文網其他相關文章!