[英]javascript - passing callback as a parameter to function
我試圖編寫一個通用函數,該函數將函數和毫秒數作為參數並將其設置為setTimeout函數。 我試過像
$("#Delay").click(function() {
delayCallBack(someFunction(a, b), 100);
});
在delayCallBack函數中
function delayCallBack(event, time) {
setTimeout(function() {
event();
}, time);
};
但這不起作用,並拋出我JavaScript錯誤。 有人可以幫我做禮拜的方式嗎?
更換
$("#Delay").click(function() {delayCallBack(someFunction(a,b), 100);});
同
$("#Delay").click(function() {delayCallBack(function(){someFunction(a,b)}, 100);});
第一行執行someFunction(a,b)
而不是第二行執行,將引用傳遞給要執行的函數。
()
調用一個函數,因此您要調用該函數而不是傳遞它。 像普通變量一樣傳遞函數:
$("#Delay").click(function() {
delayCallBack(someFunction, 100);
});
您的函數可以稍作清理……然后,它與直接調用setTimeout
沒什么不同。
function delayCallBack(callback, time) {
setTimeout(callback, time);
}
要傳遞參數a
和b
,可以從現有函數中創建一個部分應用a
和b
的新函數,然后傳遞它:
$("#Delay").click(function() {
delayCallBack(someFunction.bind(null, a, b), 100);
});
.bind
更多內容。 演示: http : //jsfiddle.net/Pd5JZ/2/
由於您傳入了值a
和b
,因此這個問題在JavaScript中的回答令人驚訝。 考慮Gerard Sexton的解決方案
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
該代碼的作用取決於定義a
和b
位置以及綁定處理程序之后它們將發生什么。 假設我們將其放在上下文中:
$(function () {
var a, b;
a = b = 5;
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
a = b = 7;
}
然后將使用a=b=7
而不是a=b=5
調用someFunction
。 如果需要第一個值,則在綁定處理程序時必須復制這些值。 像這樣:
$(function () {
var a, b;
function bind(a, b) {
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
}
a = b = 5;
bind(a, b);
a = b = 7;
}
我也遇到了同樣的錯誤:setTimeout調用(缺少引號的引號是?)。 Gerard Sexton的解釋是正確的。
正確的代碼應該是
$("#Delay").click(function() {delayCallBack(function(){someFunction(a,b)}, 100);});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.