2016-06-10 10 views
0

Ich versuche, das Beispiel mit dem IIEF hier zu reproduzieren:Verschlüsse in for-Schleifen in Javascript

Understand JavaScript Closures With Ease

EDIT

Es ist unter 3. Verschlüsse schief gegangen

Das ist mein Code:

var myArray = ["a", "b", "c"]; 

function doSomething(someArray) { 
    var counter = 10; 
    for (var i = 0; i < someArray.length; i++) { 
    someArray[i] = function(inner_i) { 
     return function() { 
     return counter += inner_i; 
     }(); 
    }(i); 
    } 
    return someArray; 
} 

var newArray = doSomething(myArray); 
console.log(newArray[0]); 
console.log(newArray[1]); 
console.log(newArray[2]); 

Der Ausgang ist

10 
11 
13 

statt

10 
11 
12 

Was ich anders mache?

+1

Die inner_i 2 in Ihrer dritten Schleife, das bedeutet: 'Zähler + = inner_i' gleich' 11 + 2 = 13' nur 'return Zähler + inner_i' – KRONWALLED

+0

' Rückkehrzähler + inner_i; ' –

+0

*" Was mache ich anders? "* Wie sollen wir das wissen? Sie haben den Code, mit dem Sie Ihren Code vergleichen, nicht angezeigt. –

Antwort

3

Das Ergebnis ist nicht verkehrt, da Sie in jeder Iteration den Wert counter aktualisieren. Stattdessen geben Sie einfach die Summe counter und i zurück.

var myArray = ["a", "b", "c"]; 
 

 
function doSomething(someArray) { 
 
    var counter = 10; 
 
    for (var i = 0; i < someArray.length; i++) { 
 

 
    someArray[i] = function(inner_i) { 
 
     return function() { 
 
     return counter + inner_i; 
 
     }(); 
 
    }(i); 
 
    } 
 

 
    return someArray; 
 
} 
 

 
var newArray = doSomething(myArray); 
 
console.log(newArray[0]); 
 
console.log(newArray[1]); 
 
console.log(newArray[2]);

+1

Verdammt, eine Minute zu spät. Nehmen Sie meine Upvote :) –

+1

Vielen Dank !! Das habe ich nicht gesehen! – NotSmartButLucky

Verwandte Themen