2015-03-09 10 views
6

Przebacz mi, jeśli to może być trochę pytanie typu noobie, ale to powinno działać, czyż nie?Stan oszczędzania pętli z zamknięciem

var elems = [1,2,3,4,5] 

for (var i = 0; i <elems.length; i++) { 
    return (function(e){ 
     console.log(e) 
    })(i); 
} 

znaczenie, powinno wypluć

>>node file.js 
1 
2 
3 
4 
5 

Z jakiegoś powodu nie jest to robi. Raczej, gdy jest uruchamiany w terminalu, wypluwa się z niego:

Czego mi brakuje? Czy mógłbyś proszę rozwinąć?

+1

A 'return' poza funkcją? Zastanawiam się, jak to nie jest błąd składni. – Bergi

+1

Powiązane pytanie - [Dlaczego instrukcja powrotu na poziomie modułu działa w Node.js?] (Http://stackoverflow.com/q/28955047/1903116) – thefourtheye

Odpowiedz

7

Bo wracają wartość zwracaną przez Iife natychmiast, w tym stwierdzeniem

return (function(e){ 
    console.log(e) 
})(i); 

ponieważ Iife prostu drukuje 0 i niczego nie powrócić wyraźnie, JavaScript zwróci undefined domyślnie i wyjściu natychmiast. Aby rozwiązać ten problem, tylko kropla słowa kluczowego return,

(function(e){ 
    console.log(e) 
})(i); 

PS: Czy kiedykolwiek zastanawialiście się, dlaczego oświadczenie w powyższym kodzie return działa? Aby o tym pomyśleć, nie jest to funkcja. Wtedy technicznie jest to błąd, prawda? ;-) Wyjaśniłem to szczegółowo, w tym question.

2

Po wywołaniu zwrotu, natychmiast wyskoczy z pętli. Jeśli chcesz zwrócić wszystkie wartości, będziesz musiał umieścić je w kontenerze i zwrócić kontener.

Powiązane problemy