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