JavaScript中调用带括号和不带括号函数的区别

JavaScript中调用带括号和不带括号函数的区别,javascript,Javascript,我正在处理一个JavaScript文件上传事件。我有下面的初始值设定项和下面的函数: 初始值设定项 作用 在初始值设定项中,我注意到如果我这样做,则会有差异 before\u add:progressBar.showv.s.before\u add:progressBar.show()。使用括号时,即使它绑定到before\u add选项,也会调用一次,如果没有括号,则不会调用 我观察到的行为有什么解释吗?带括号的方法由于括号而被调用,调用的结果将存储在添加之前 如果没有括号,则在变量中存储函数

我正在处理一个JavaScript文件上传事件。我有下面的初始值设定项和下面的函数:

初始值设定项

作用

在初始值设定项中,我注意到如果我这样做,则会有差异

before\u add:progressBar.show
v.s.
before\u add:progressBar.show()
。使用括号时,即使它绑定到
before\u add
选项,也会调用一次,如果没有括号,则不会调用

我观察到的行为有什么解释吗?

带括号的方法由于括号而被调用,调用的结果将存储在添加之前

如果没有括号,则在变量中存储函数的引用(如果愿意,也可以存储“指针”)。这样,每当有人在_add()之前调用时,就会调用它

如果这还不能解决问题,也许这会有帮助:

函数Foo(){
回复‘酷!’;
}
功能条(arg){
控制台日志(arg);
}

//存储调用Foo函数的>>结果>对Bar函数的引用函数在JavaScript中是一流的。这意味着它们可以像任何其他参数或值一样传递。您看到的是传递函数和传递函数返回的值之间的区别

在您的示例中:

before_add: progressBar.show
您希望传递
progressBar.show
而不是
progressBar.show()
,因为前者表示函数(
function(){$('.upload progress bar').show();return true;}
),而后者表示返回的结果(
true

下面是另一个例子:

before_add: progressBar.show
//这个函数所做的就是调用传递给它的任何函数
var callAnotherFunction=函数(func){
返回func()
}
//返回3-仅此而已
var return3=函数(){return3}
//`callAnotherFunction`被传递`return3`
//因此,`callAnotherFunction`将`return3()`==`return3`
//所以“3”被打印出来了
document.write(callAnotherFunction(return3))
//`callAnotherFunction(return3())`与`callAnotherFunction(3)`相同。
//这将不打印任何内容,因为在`callanother函数中`
//'func'是3,不是函数
//因此无法调用它,因此不会返回任何内容
//“document.write”不会打印任何内容。

document.write(callAnotherFunction(return3())
带圆括号由于圆括号调用该方法,该调用的结果将存储在添加之前。如果没有括号,则在变量中存储对函数的引用(或“指针”(如果愿意)。编辑:添加为哪个更合适。这是否回答了您的问题?
before_add: progressBar.show