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教程》】

以上就是es6的class有没有变量提升的详细内容,转载自php中文网

点赞(305) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部