我正在循環中使用動態創建的函數。如何注入一個變量作爲字符串?
for (var i = 0; i < 4; i++) {
window["functiontest" + i] = function() { alert(i); }
}
它的工作原理,但不是我想如何讓它工作。因爲當我這樣做時,這意味着當functiontest0
將運行時,它將提醒「3」,因爲它實際上在循環完成時添加var i
。
我想要的是以某種方式「硬編碼」當前的i
,所以它實際上會提醒「0」而不是「3」。我的意思是這樣的:
window["functiontest" + i] = function() {
// I need just the current state for `i` here and
// not just the variable `i` - so for exampe I need
// it as `i` literally put 0
}
有沒有什麼辦法可以迫使它可將結果寫成「串」或其他什麼東西?
THX for help guys。並抱歉重複無法找到任何東西,而搜索它。主要是因爲我不能解釋它是那麼好:-)
但我結束了這樣的事情:
for (var genfunc = 0; genfunc < 4; genfunc++) {
if (genfunc == 0) { //left
window["keyDown" + sys_curcontrols[genfunc]] = (function (unique) {
return function() { window["sys_keyLeft" + unique] = -1; }
})(nid);
}
不。它是執行函數以創建範圍的完美示例。如果我們將閉包定義爲帶有自由變量的函數,那麼剛剛添加的函數不是閉包。然而,你返回的函數(和函數原始代碼)是閉包,這就是爲什麼問題甚至存在(並且由於JavaScript處理自由變量的原因)。 – 2013-02-21 21:12:50
@FelixKling,好點。我修改了答案。 – Lukas 2013-02-21 21:19:38
thx求助:-) – JohnMalkowich 2013-02-21 21:34:04