1. 程式人生 > >es6 Class 不存在變數提升

es6 Class 不存在變數提升

Class 不存在變數提升

類不存在變數提升(hoist),這一點與 ES5 完全不同。

  1. newFoo();// ReferenceError
  2. classFoo{}

上面程式碼中,ES6 Foo類使用在前,定義在後,這樣會報錯,因為 ES6 不會把類的宣告提升到程式碼頭部。這種規定的原因與下文要提到的繼承有關,必須保證子類在父類之後定義。

  1. {
  2. let Foo=class{};
  3. classBarextendsFoo{
  4. }
  5. }

上面的程式碼不會報錯,因為Bar繼承Foo的時候,Foo已經有定義了。但是,如果存在class的提升,上面程式碼就會報錯,因為class會被提升到程式碼頭部,而let命令是不提升的,所以導致Bar

繼承Foo的時候,Foo還沒有定義。