over 4 years ago

最近在使用function array時碰到了一個問題,就是如果需要傳遞變數時,會有變數參考錯誤的

情況。其實這情況滿常見的,在bind event時也會常常碰到類似的狀況.

詳細解法可以參考:http://stackoverflow.com/questions/3495679/passing-parameters-in-javascript-onclick-event

假如說今天想要在FA這個array中塞10個function如下

function()  
{  
 alert(1);  
}  
function()  
{  
 alert(2);  
}  
function()  
{  
 alert(3);  
}  
....以此類推  

原本的寫法是:

var FA=[];  
for(var i=0;i<=10;i++)  
{  
 FA.push(function()  
 {  
 alert(i);  
 });  
}  
FA[0]();//呼叫第一個function  

結果得到的結果是  11

沒錯,因為他會reference到目前i的值,事情沒有那麼單純(是我太遜了...)

要改成

for(var i=0;i<=10;i++)  
{  
 FA.push(function(x)  
 {  
        return function()  
        {  
            alert(x);     
        }  
 }(i));  
}  

感覺有很多function的使用方法還不太熟,下次來好好研究一下匿名函式!!

← [Linux]"source" "sh" 差異 MAC OS X 啟動 Apache與PHP →
 
comments powered by Disqus