JavaScript回調方法中使用外部變量出現的問題

測試用例

function cprint(str) {
    console.log(str);
}

function temp() {
    for(var i=0; i<3; i++) {
        $("#bt"+i).click(function() {
            cprint(i);
        });
    }
}

上邊方法的目的是給三個bt綁定點擊事件,預期的結果是

bt0 click: 0
bt1 click: 1
bt2 click: 2

但是執行後的結果是,點擊三個按鈕輸出的都是3。

bt被點擊後回調綁定的click中的方法,回調方法直接使用了外部變量i,而不是自己設置臨時變量保存i的結果。

解決辦法

function temp() {
    for(var i=0; i<3; i++) {
        click(i);
    }
}

function click(i) {
    $("#bt"+i).click(function() {
        cprint(i);
    });
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章