2016-12-31 114 views
0

我試圖做一個函數REPEAT,而不是。這是我的代碼:嵌套函數重複

function REPETER(nb) { 
return { 
    INSTRUCTIONS: function(callback) { 
     for(i_repeter=1;i_repeter<=nb;i_repeter++) callback(); 
     return this ; 
    } 
}; 
} 
var x = 1 ; 
REPETER(5) 
.INSTRUCTIONS (() => { 
xxx = xxx + 2 ; 
alert(i_repeter); 
} 
); 

它運作良好。

但是:

REPETER(2) 
.INSTRUCTIONS(() => { 
xxx = xxx + 1 ; 
REPETER(5) 
.INSTRUCTIONS(() => { 
xxx = xxx + 2 ; 
alert(i_repeter); 
} 
); 
} 
); 

不工作,第一REPETER什麼都不做。

我該如何解決這個問題?

謝謝!

回答

0

您需要在INSTRUCTIONS函數內聲明i_repeter。因爲你沒有聲明它,所以你正在創建一個隱含的全球。全球化是一件不好的事情,隱含的事情是雙重的。既然你有一箇中繼器調用中繼器,你最終會產生串擾;第一個認爲它是在它之前完成的。

所以:

function REPETER(nb) { 
    return { 
    INSTRUCTIONS: function(callback) { 
     var i_repeter;     // <=== Change is here 
     for (i_repeter = 1; i_repeter <= nb; i_repeter++) callback(); 
     return this; 
    } 
    }; 
} 

也不要嘗試在功能更新xxx使用i_repeter(並且一定要聲明xxx)。

+1

謝謝,我認爲這是變量i_repeter的問題,但我確實不知道它到底是什麼。 該指令警報(i_repeter)是一個嘗試,看看問題出在哪裏,這是不是在我的代碼,我道歉。 – rognntudjuu