2016-07-15 14 views
0

Ich habe ein seltsames Verhalten mit einer For-In-Schleife.für In-Loop seltsames Verhalten

Code:

var obj = { 
    q:1, 
    w:2, 
    e:4, 
    r:5 
}; 

function test(data) { 
    for (key in data) { 
     //do sth; 
    } 
} 

!function() { 
    for (key in obj) { 
     console.log(key); 
     test({a:1,b:2,c:3}); 
     console.log(key); 
    } 
}(); 

, wie ich die Ausgabe zu erwarten sollte etw so aussehen: diese

qqwweerr

aber ich habe:

qcwcecrc

i kann nicht finden th Die Logik hinter diesem Verhalten! Die Schlüsselvariablen sind lexikalisch begrenzt! Was ist mit meinem Code?

+1

Denken Sie daran, 'let' oder' var' alle Kennungen auf der Ebene Sie wollen, –

Antwort

3

Sie müssen in beiden Funktionen key mit var deklarieren. Derzeit ist es eine implizite globale Variable.

function test(data){ 
    for (var key in data){ 
     //do sth; 
    } 
} 

Weil es global ist, Verweis auf key in Funktion die gleiche Variable beinhaltet, so die Schleife in test() Verwirrungen die Schleife in der anonymen Funktion auf.

(Sie könnten let statt var verwenden, wenn Sie diesen Fall, obwohl in wollte würde es keinen Unterschied machen.)