Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数引用未定义的局部对象_Javascript_Reactjs - Fatal编程技术网

Javascript 函数引用未定义的局部对象

Javascript 函数引用未定义的局部对象,javascript,reactjs,Javascript,Reactjs,我有一个带有一些局部变量和方法的React组件。方法声明顺序不重要吗?因为它们在任何地方都可用,所以一旦声明,我想从组件调用它们 但是,当我尝试引用局部变量中的方法时,如果该方法在局部变量下面声明,它会给出未定义的,为什么? 例如: 您可以尝试在组件的类构造函数中设置localVariable class YourClassName extends React.Component { constructor(props) { super(props); this.localV

我有一个带有一些局部变量和方法的React组件。方法声明顺序不重要吗?因为它们在任何地方都可用,所以一旦声明,我想从组件调用它们

但是,当我尝试引用局部变量中的方法时,如果该方法在局部变量下面声明,它会给出未定义的,为什么? 例如:

您可以尝试在组件的类构造函数中设置localVariable

class YourClassName extends React.Component {
  constructor(props) {
    super(props);
    this.localVariable = [
      {name: 'test', myFunction: this.someFunction},
      {name: 'test2', myFunction: this.someFunction}
    ]
  }
  someFunction = () => {
    // logic...
  }
}

请参考下面的链接

当您使用箭头函数语法创建某个函数时,实际上您正在创建一个变量,该变量等于您分配给它的函数

因此,当您定义局部变量时,它不会得到引用,因为它没有定义

这是函数声明和函数作为表达式的问题


函数表达式是在执行到达时创建的,从那时起就可以使用。

您能证明整个组件的代码吗?您使用的语法只是构造函数的替代品,这就是顺序的重要性所在。尝试:someFunction{}而不是someFunction==>{}@MikhailKatrin,我可以提供一个示例。@Titus,现在很清楚了,但是为什么第三个示例有效?这是因为在调用myFunction而不是在创建对象时访问此.someFunction。另外,在上面的链接上签出函数表达式vs函数声明。因此,如果我将其从函数表达式转换为函数声明,则在声明之前它将是可用的,因为提升。但是为什么第三个例子有效呢?当我传递的不是一个引用,而是另一个函数?1。您正在创建一个对象作为localVariable,属性作为一个名为myFunction的方法。2.在第一种情况下,您正在分配一个已创建的函数,因此该函数运行良好。3.在第二种情况下,您正在分配一个尚未定义的函数。因此它失败了。4.在第三种情况下,您分配的是一个arrow函数,它没有自己的“this”,并且引用父函数作用域。在定义localVariable时,未在此基础上定义“this.someFunction”,但在分配localVariable后,您将为“this.someFunction”分配一个新函数。我真的不理解这一部分:'在定义localVariable时,'this.someFunction'没有在此基础上定义,但在分配localVariable后,您将一个新函数分配给'this.someFunction'。你的意思是当创建“localVariable”时,“someFunction”不存在,但我给它分配了一个箭头函数,当它被称为“someFunction”时,它存在,所以它工作?谢谢。在第三种情况下,您将一个新函数作为箭头函数分配给myFunction属性,它将在您调用它时执行,而不是在您定义它时执行。当您定义myFunction属性时,time someFunction是未定义的,之后,您在localVariable下面定义了它。如果在定义某个函数之前调用localVariable[0].myFunction(第三种情况),则会显示错误。我希望避免使用构造函数
class YourClassName extends React.Component {
  constructor(props) {
    super(props);
    this.localVariable = [
      {name: 'test', myFunction: this.someFunction},
      {name: 'test2', myFunction: this.someFunction}
    ]
  }
  someFunction = () => {
    // logic...
  }
}