您需要区分函数引用和调用(调用)。当您关联事件处理程序或回调时,您需要一个函数引用,然后在适当的时间调用该函数引用。一旦您传递参数并将(..)
(或 nullary ()
)添加到函数引用,它就会被调用。如果您在绑定期间这样做,那么函数将在绑定时被调用,并且函数的输出将被绑定而不是绑定引用(这将允许正常预期的稍后调用)。
您应该按如下方式更改两个绑定:
$(document).ready(doBind); //Now a reference to that function
function doBind() {
$('#choice').change(function() { myAlert('Choice has been changed!');});
//New anonymous function reference which allows for arguments and is conventionally used
}
function myAlert($msg) {
alert($msg);
}
几个简单的例子来突出语法和()
.
下面的函数将采用函数引用。作为参数,然后在内部执行它(基本上处理程序和回调如何工作)。
functionWrapper = function(funk) {
//Do something else
funk()
}
现在流行的匿名函数声明,然后立即调用:通常会编写函数function() {...}()
,这会导致使用提供的任何参数立即调用对新创建函数的引用(在 JavaScript 中用于强制作用域)。任何一种情况下的参数都可以作为函数中的参数使用,因此调用中的任何内容都(..)
映射到将在中声明的内容,function(..)
但关注引用与调用是您问题的主要问题。