function runSomething () {
// some stuff happens
}
$(selector).bind('event', runSomething());
$(selector).bind('event', runSomething);
这两个版本的绑定有什么区别?
这是一个实际的例子: http://jsbin.com/icajo/edit
有人可以解释为什么会这样做。
我正试图让多个按钮在事件中运行该功能,我该怎么办?
答案 0 :(得分:5)
在第一种情况下,你绑定runSomething()
调用的结果,在第二个 - 函数本身。
<强>更新强>
@JSNewbie,运行它并告诉你在每个警报中看到的内容。
function runSomething () {
return 3;
}
var a1 = runSomething();
var a2 = runSomething;
alert(a1);
alert(a2);
答案 1 :(得分:0)
在第一行中,函数runSomething在bind语句中执行,并且它返回的内容绑定到事件,例如,如果runSomething函数返回另一个函数,那么该函数被绑定,并将在事件上执行
在第二行,runSomething函数不在该行执行,仅在“event”发生时执行。
答案 2 :(得分:0)
$(selector).bind('event', 'runSomething()');
(注意'runSomething()'
周围的额外引号)
收到事件后运行函数runSomething()
。
$(selector).bind('event', runSomething);
将函数runSomething()
设置为事件的回调函数,这意味着它将接收事件中包含的任何参数,这通常对currentTarget有用(因此您可以在许多按钮上使用相同的事件)或获取来自事件的特定信息(mousemove在触发时返回鼠标的X,Y位置)。
因此,如果您需要访问触发事件时返回的事件对象,则第一个版本将无法正常工作。
function runSomething(event){
console.log(event); // this would show the event object if the second code is used.
}
答案 3 :(得分:0)
在javascript函数中被视为变量。添加“()”将调用该函数,并传递函数的结果(如果函数不返回任何内容,则可能是'undefined')。第二种是使用bind方法的正确方法,因为它为触发事件时调用的函数提供了句柄。
答案 4 :(得分:0)
在javascript中,将一组参数传递给函数调用该函数,它将被计算为函数返回值。
var test = function() { return 1; } // Creates a new function that returns 1
alert(test.toString()); // => "function () { return 1; }"
alert(test().toString()); // => "1"
偶数alert
本身只是一个指向函数的变量。
alert(alert); // => "function alert() { [native code] }"
因此,如果是第一个示例,在调用runSomething()
时,它会立即计算该函数,然后将返回值作为参数传递给bind()
。在您的情况下,它会在页面加载时逐出alert()
,然后将undefined
传递给bind()
在第二个示例中,使用变量runSomething
将函数本身传递给bind()
。绑定然后仅在事件被引发时才使用该函数。
要真正打动你的想法,你可以拥有返回函数的函数,然后评估函数(就像在你的第一个例子中一样)是正确的......例如
var counter = 0;
function GenerateNext() {
counter++;
return new Function("alert(" + counter + ")");
}
a = GenerateNext();
b = GenerateNext();
b() // will alert 2
a() // will alert 1
$(selector).bind('event', GenerateNext()); // alert 3
$(selector).bind('event', a); // alert 1
$(selector).bind('event', b); // alert 2
这完全取决于你想要做什么;传递函数本身,或传递函数的返回值。