9.8 函数声明和类 声明

函数 声明……

  • 块级作用域,类似 let
  • 创建全局对象的属性(在全局作用域中),类似 var
  • 变量提升:在作用域中的所有函数声明,都会在作用域的最顶部创建。

以下的代码演示了函数声明的变量提升:

{ // Enter a new scope

    console.log(foo()); // OK, due to hoisting
    function foo() {
        return 'hello';
    }
}

类声明……

  • 块级作用域
  • 不创建全局对象的属性
  • 变量不提升

类变量不提升可能是令人惊讶的,因为在本质上它们创建了函数。这种行为的理由是,继承的值是通过表达式定义,并且这些表达式必须中适当的时间执行。

{ // Enter a new scope

    const identity = x => x;

    // Here we are in the temporal dead zone of `MyClass`
    let inst = new MyClass(); // ReferenceError

    // Note the expression in the `extends` clause
    class MyClass extends identity(Object) {
    }
}

results matching ""

    No results matching ""