Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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 带括号的func和不带括号的func有什么区别_Javascript_Reactjs - Fatal编程技术网

Javascript 带括号的func和不带括号的func有什么区别

Javascript 带括号的func和不带括号的func有什么区别,javascript,reactjs,Javascript,Reactjs,在上面的例子中,在我的if条件(opr=='+')中,我调用了我的onSubmit func(不带括号),它可以找到并显示我的号码的当前状态,但在else条件下(opr==='-'&&number!==0)我使用onSubmit()在我的setState回调中使用括号,它不会像应该的那样更新状态 有人能解释一下使用括号和不使用括号调用的javascript函数之间的区别吗 谢谢 没有括号,您只能访问它的引用。例如,您可以使用它将引用传递到另一个函数或使用它的属性,因为每个函数也是一个对象。请看一

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

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


谢谢

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

函数优先(){
console.log('first');
}
函数second(func){//这将获取一个函数参数
func();//这里我称之为
}
第二(第一);//这里我传递函数的引用

//实际上,使用括号调用第二个,而不使用括号,您只能访问它的引用。例如,您可以使用它将引用传递到另一个函数或使用它的属性,因为每个函数也是一个对象。请看一个例子

函数优先(){
console.log('first');
}
函数second(func){//这将获取一个函数参数
func();//这里我称之为
}
第二(第一);//这里我传递函数的引用

//实际上用括号调用第二个
当函数名后面跟着括号时,就像我们说我想调用函数一样。当您在一个或另一个位置传递函数名时,您只需将引用的副本传递给该函数

函数sayHello(){
log('Hello');
}
//这里我们叫sayHello();
你好;
函数executeAnotherFunction(func){
//我们请求执行传递的函数。
func();
}
//这里我们将sayHello的引用传递给executeAnotherFunction

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

函数sayHello(){
log('Hello');
}
//这里我们叫sayHello();
你好;
函数executeAnotherFunction(func){
//我们请求执行传递的函数。
func();
}
//这里我们将sayHello的引用传递给executeAnotherFunction
executeAnotherFunction(sayHello),因为它接受回调函数作为第二个参数,它将在更新组件状态后调用该参数

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

将函数作为引用传递(不带括号)可确保只有在组件的状态更新后才会调用
onSubmit
方法,并且您可以依赖
this.state
来包含新值

自己调用函数(带括号)意味着
onSubmit
方法将始终在此
this.state
之前执行,因为它将在
setState
之前运行。如果这是故意的行为,那么明确地写出来可能更有意义

 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);
}
因为,它接受回调函数作为第二个参数,它将在更新组件状态后调用该参数

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

将函数作为引用传递(不带括号)可确保只有在组件的状态更新后才会调用
onSubmit
方法,并且您可以依赖
this.state
来包含新值

自己调用函数(带括号)意味着
onSubmit
方法将始终在此
this.state
之前执行,因为它将在
setState
之前运行。如果这是故意的行为,那么明确地写出来可能更有意义

 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);
}

使用括号,您正在编写函数调用。没有它们,您只是“引用”函数

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

函数引用为什么有用

有些函数,如
window.setTimeout
,将函数引用作为参数

this.onSubmit()
this.setState({ number: number-1 });

此处
someFunc
将在1秒后执行。你不加括号,因为你说的是“我希望这个函数在延迟后被调用”。在此处添加括号会立即调用函数。

使用括号,您正在编写函数调用。没有它们,您只是“引用”函数

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

函数引用为什么有用

有些函数,如
window.setTimeout
,将函数引用作为参数

this.onSubmit()
this.setState({ number: number-1 });

此处
someFunc
将在1秒后执行。你不加括号,因为你说的是“我希望这个函数在延迟后被调用”。在这里添加括号会立即调用函数。

调用没有括号的函数是指函数,而不是wha