簡體   English   中英

js:無法將參數傳遞給setTimeOut中的匿名函數

[英]js: unable to pass parameter to anonymous function in setTimeOut

我似乎無法將參數傳遞給匿名函數作為setTimeOut調用的參數。 這是代碼

http://jsfiddle.net/5xg5d6pp/

var arr = ["Just a test","I miss you so much darling #$%&%@;..\]]/"];

console.log(arr);
for(var c=0; c < arr.length; c++){
    console.log(arr[c]);

    //wait 1 sec for next loop
    setTimeout(function(arr[c]) {
        do_magic(arr[c]);
    }, 1000);
}

function do_magic (passed_var){
    console.log(passed_var);
}

當您執行此setTimeout(function(arr[c]) {您正在定義一個新函數,並說我希望此函數接受名為“ arr [c]”的參數,這並不是說您要傳遞arr [c]並由於參數名稱中不能包含任何特殊字符而導致錯誤,您應該做的是在循環外部定義一個函數以避免循環閉合問題並將參數傳遞給該函數讓該函數為您創建setTimeout。請參閱循環內的JavaScript閉包-有關閉包的更多信息的簡單實際示例 ,還請閱讀此書以了解有關javascript函數的更多信息: http : //javascript.info/tutorial/functions-declarations-and -expressions

這是下面的正確代碼:

var arr = ["Just a test","I miss you so much darling #$%&%@;..\]]/"];

console.log(arr);
for(var c=0; c < arr.length; c++){
    console.log(arr[c]);

    setTimeoutFactory(arr[c]);
}

function do_magic (passed_var){
    console.log(passed_var);
}

function setTimeoutFactory(text) {
setTimeout(function() {
        do_magic(text);
    }, 1000);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM