2015-11-15 109 views
-1

我想在for循環中爲for循環中的每個元素使用forEach函數,以將for循環的索引指定給元素。索引混淆:嵌套JavaScript循環forfor for循環

我的代碼:

for (var i = 0; i < 2; i++) { 
console.log('i:', i); 
["element0", "element1", "element2"].forEach(function logArrayElements(element, i) { 
    console.log('element:', element, 'index:', i); 
}); 
} 

結果:

i: 0 
element: element0 index: 0 
element: element1 index: 1 
element: element2 index: 2 
i: 1 
element: element0 index: 0 
element: element1 index: 1 
element: element2 index: 2 

我所期待的:

i: 0 
element: element0 index: 0 
element: element1 index: 0 
element: element2 index: 0 
i: 1 
element: element0 index: 1 
element: element1 index: 1 
element: element2 index: 1 
+0

指數爲什麼要使用變量名'i'兩次? – Doorknob

+1

'element3'?你的意思是'element2' – Ramanlfc

回答

2

你說element3我假設你的意思element2

for (var i = 0; i < 2; i++) { 
console.log('i:', i); 
["element0", "element1", "element2"].forEach(function (element, index) { 
    console.log('element:', element, 'index:', i); 
}); 
} 
您使用 i作爲循環計數器

,並在forEach

1

那是因爲你提供的i作爲第二個參數的名稱forEach,從外面「遮蔽」i。可變分辨率從內部開始到外部,內部優先。這意味着,回調將使用內部i而不是外部i

你可以做的是重命名這些變量中的任何一個,以便內部不會影響外部變量。另外,i只是一個壞名字。將它命名爲更有意義的內容。

0

您需要使用不同的變量。你正在使用'我'兩次。

for (var i = 0; i < 2; i++) { 
console.log('i:', i); 
["element0", "element1", "element3"].forEach(function logArrayElements(element, x) { 
    console.log('element:', element, 'index:', x); 
}); 
}