2015-03-09 5 views
6

मुझे माफ़ कर दो अगर यह नोबई प्रश्न का थोड़ा सा हो सकता है, लेकिन यह काम नहीं करना चाहिए?बंद करने के लिए फॉर-लूप बचत स्थिति

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

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

अर्थ है, यह

>>node file.js 
1 
2 
3 
4 
5 

थूक से बाहर कर देना चाहिए किसी कारण यह इस नहीं कर रहा है के लिए। इसके बजाय जब यह टर्मिनल में चलाया जाता है, तो यह

>>node file.js 
1 

मुझे क्या याद आ रही है? क्या आप विस्तृत कर सकते हैं।

+1

एक समारोह के बाहर एक 'वापसी'? मुझे आश्चर्य है कि यह एक वाक्यविन्यास त्रुटि नहीं है। – Bergi

+1

संबंधित प्रश्न - [मॉड्यूल स्तर वापसी कथन Node.js में क्यों काम करता है?] (Http://stackoverflow.com/q/28955047/1903116) – thefourtheye

उत्तर

7

क्योंकि आप इस बयान

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

में मूल्य तुरंत Iife द्वारा दिया, लौट रहे हैं के बाद से Iife सिर्फ 0 प्रिंट और कुछ भी स्पष्ट रूप से वापस नहीं करता है, जावास्क्रिप्ट डिफ़ॉल्ट और बाहर निकलने के तुरंत द्वारा undefined वापस आ जाएगी। इसे ठीक करने के लिए, बस return कीवर्ड ड्रॉप,

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

पुनश्च: क्या आपने कभी सोचा है क्यों उपरोक्त कोड में return बयान काम करता है? इसके बारे में सोचने के लिए, यह एक समारोह के अंदर नहीं है। फिर तकनीकी रूप से यह एक त्रुटि है, है ना? ;-) मैंने इसे question में विस्तार से समझाया।

2

जब आप वापसी कहते हैं, तो यह तुरंत लूप से बाहर हो जाएगा। यदि आप सभी मूल्यों को वापस करना चाहते हैं, तो आपको उन्हें एक कंटेनर में रखना होगा और कंटेनर वापस करना होगा।

संबंधित मुद्दे