PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

es6的class有没有变量提升

WBOY
WBOY 原创
2022-04-08 18:43:59 1884浏览

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还没有定义。

【相关推荐:《vue.js教程》】

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。