React类

时间:2017-10-26 15:47:15

标签: javascript reactjs ecmascript-6

用const声明的函数和没有let或const声明的函数和在ES6类中声明的函数之间的区别是什么?

class App extends Component {

    submitFood = () =>{
        // some code
    }

为什么上述工作正常,但下面的声明会出错:

class App extends Component {

    const submitFood = () =>{
        // some code
        }

2 个答案:

答案 0 :(得分:2)

首先:您提供的示例都不是有效的ES6。 The grammar rules for ES6 classes仅允许类主体内的方法定义。即。

class MyClass {
  method1() {}
  method2() {}
}

然而,第一个例子是使用class fields proposal。该提议扩展了现有语法,以允许定义表单属性

class MyClass {
  someProperty = value;
}

这些赋值不会在类定义时计算,而是在实例化时计算。它是用于在构造函数中分配属性的语法糖:

class MyClass {
  constructor() {
    this.someProperty = value;
  }
}

您的第二个示例只是无效的语法,因为没有语法规则允许在类字段之前放置letconst

请记住,类字段是不是变量声明或变量赋值。

答案 1 :(得分:-3)

const submitFood = () =>{ // some code }

功能(submitFood=() {})的创建和变量托管letconst变量托管中通常的规则创建。
所以失败,因为submitFood()没有定义。 (它会抛出一个ReferenceError)。