React类中的es6函数声明

joj*_*ohn 5 javascript ecmascript-6 reactjs

用const声明的函数与不使用let或const声明的函数与在ES6类中否则声明的函数之间有什么区别?

class App extends Component {

    submitFood = () =>{
        // some code
    }
Run Code Online (Sandbox Code Playgroud)

上面的为什么可以正常工作,但是下面的声明给出了错误:

class App extends Component {

    const submitFood = () =>{
        // some code
        }
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

首先:您提供的示例都不是有效的 ES6。ES6 类的语法规则只允许在类体内定义方法。IE

class MyClass {
  method1() {}
  method2() {}
}
Run Code Online (Sandbox Code Playgroud)

然而,第一个例子是使用类字段提案。这个提议扩展了现有的语法以允许定义表单的属性

class MyClass {
  someProperty = value;
}
Run Code Online (Sandbox Code Playgroud)

这些分配不是在类定义时评估,而是在实例化时评估。这是在构造函数中分配属性的语法糖:

class MyClass {
  constructor() {
    this.someProperty = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Gam*_*msh -3

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

函数的创建(submitFood=() {})和变量的创建是变量托管中的常见规则被阻止letconst。由于未定义,
因此失败。submitFood()(它会抛出一个ReferenceError)。