带括号的func与没有括号的func有什么区别

时间:2017-03-10 07:21:55

标签: javascript reactjs

 onHangeChangeQuanity = (opr) => {
    let { number } = this.state;
    if (opr === '+') {
      this.setState({ number: number+1 }, this.onSubmit);
    } else if (opr === '-' && number !== 0) {
      this.setState({ number: number-1 }, this.onSubmit());
    }
 }

onSubmit = () => {
   let { attributeName, typeOfField } = this.props.attribute;
   let { number } = this.state;
   let attr = { attributeName, typeOfField, selectedValues: [ number ] };
   this.props.onHandle(attr);
}

在我的if条件(opr === '+')中的上述示例中,我调用了我的onSubmit func而没有括号,它可以找到并显示我的number的当前状态,但是在else条件(opr === '-' && number!==0)中我在我的setState回调中使用带有括号的onSubmit(),它不会像应该的那样更新状态。

有人可以解释一下使用和不使用括号调用的javascript函数之间的区别。

三江源。

5 个答案:

答案 0 :(得分:1)

没有括号,您只能访问它的参考。您可以使用它将引用传递给另一个函数或使用它的属性,因为每个函数也是一个对象。看一个例子



function first(){
   console.log('first');
}

function second(func) { // this get an parameter which is a function
   func(); // And here I call it 
}

second(first); // Here I pass the function's reference
               // And actually call the second with parentheses




使用括号,您可以执行该函数的主体

答案 1 :(得分:1)

因为setState is not guaranteed to be synchronous,它接受​​一个回调函数作为第二个参数,它在更新组件的状态后将调用它。

  

无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升。

将函数作为参考传递(不带括号)可确保仅在组件状态更新后调用onSubmit方法,并且可以依赖this.state来包含新值。

自己调用该函数(带括号)表示您的onSubmit方法将始终在此this.state具有正确值之前执行,因为它将在{{1}之前运行确实。如果这是故意行为,那么明确地写它可能更有意义。

setState

答案 2 :(得分:1)

使用括号,您正在编写函数调用。如果没有它们,你只需简单地引用"这个功能。

函数调用只执行函数的内容,可能会也可能不会返回值。函数引用可以像任何其他变量一样使用juts。您可以将其传递给其他函数,将其分配给另一个变量等。

为什么函数引用有用?

某些函数(如window.setTimeout)将函数引用作为参数。

window.setTimeout(someFunc, 1000);

此处someFunc将在1秒后执行。你没有添加括号,因为你说的是​​"我希望这个函数在一段时间后被调用"。在这里添加括号会立即调用该函数。

答案 3 :(得分:0)

当函数名后跟括号时,就像我们说我想调用函数一样。当您在一个或另一个位置传入函数名称时,您只需将该引用的副本传递给函数。

Invalid CORS request

答案 4 :(得分:0)

调用一个没有括号的函数是指函数而不是它返回的函数,它就像分配并用括号调用它调用该方法的值,函数体执行并可能返回所需的函数。