es6的class没有变量提升。在es5中class存在变量提升,可以先使用再定义类,而在es6中,不会把类的声明提升到头部,先使用在定义的话会产生报错,因此不能先使用再定义,es6的class也就没有变量提升。
本文操作环境:windows10系统、Vue2.9.6版,DELL G3电脑。
es6的class有没有变量提升
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还没有定义。
【