首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ES6课程没有被悬挂?

为什么ES6课程没有被悬挂?
EN

Stack Overflow用户
提问于 2016-02-21 14:53:23
回答 4查看 15.1K关注 0票数 70

由于ES6类只是JavaScript现有的基于原型的继承[1]的语法糖,因此(IMO)提升它的定义是有意义的:

代码语言:javascript
复制
var foo = new Foo(1, 2); //this works

function Foo(x, y) {
   this.x = x;
   this.y = y;
}

但以下几点是行不通的:

代码语言:javascript
复制
var foo = new Foo(1, 2); //ReferenceError

class Foo {
   constructor(x, y) {
      this.x = x;
      this.y = y;
   }
}

为什么ES6课程没有被悬挂?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-21 15:26:40

为什么ES6课程没有被悬挂?

实际上,它们是挂起的(变量绑定在整个作用域中可用),就像一样--它们只是没有初始化。

提升它的定义是有意义的

不是的。在定义类之前使用类从来都不是一个好主意。考虑一下这个例子

代码语言:javascript
复制
var foo = new Bar(); // this appears to work
console.log(foo.x)   // but doesn't

function Bar(x) {
    this.x = x || Bar.defaultX;
}
Bar.defaultX = 0;

并将其与

代码语言:javascript
复制
var foo = new Bar(); // ReferenceError
console.log(foo.x);

class Bar {
    constructor (x = Bar.defaultX) {
        this.x = x;
    }
}
Bar.defaultX = 0;

如您所期望的那样抛出一个错误。这是一个静态属性,原型混合器,装饰和所有东西的问题。此外,子类也非常重要,当您使用一个类及其未经调整的原型时,子类在ES5中完全崩溃,但如果还没有初始化extended类,则会抛出一个错误。

票数 64
EN

Stack Overflow用户

发布于 2019-02-06 23:02:14

虽然非挂起的类(在某种意义上它们的行为类似于let绑定)可以被认为更好,因为它们会导致更安全的使用(参见Bergi的回答),但2度博客上的以下解释似乎为这种实现提供了一个稍微更基本的原因:

这种限制的原因是类可以有一个值为任意表达式的extends子句。该表达式必须在适当的“位置”中进行计算,其评估不能被悬挂。

票数 15
EN

Stack Overflow用户

发布于 2017-09-17 13:41:23

Javascript中的所有声明(var、let、const、function、function*、class)都是悬挂的,但它应该在相同的作用域中声明。

正如您所说的,"ES6类只是JavaScript现有的基于原型的继承的一种语法糖“。

,那么让我们了解一下它是什么?

这里您声明了一个类,它实际上是“特殊函数”。让我们假设您的函数Foo()和类Foo都在全局范围内。

代码语言:javascript
复制
class Foo {
   constructor(x, y) {
      this.x = x;
      this.y = y;
   }
}

下面是类Foo的编译代码。

代码语言:javascript
复制
var Foo = (function () {
    function Foo(x, y) {
        this.x = x;
        this.y = y;
    }
    return Foo;
}());

在内部,类以相同的名称在包装器函数(Iife)中转换为函数,该包装函数返回您的函数。

因为您的函数的(类)作用域发生了更改。你试图在全局范围内创建函数对象,而这实际上是不存在的。

一旦编译完成,就会得到变量Foo中的函数。因此,稍后您可以在var中使用函数来创建该对象。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35537619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档