2012-05-30 15 views
5
array = [1,2,3,4] 

for num in array 
    //do something 

शेष कार्य के संदर्भ में num का मूल्य क्या है? क्या num लूप पर डूब गया है?लूप के लिए कॉफ़ीस्क्रिप्ट में परिवर्तनीय दायरा?

+0

जब आप इसे चलाते थे तो क्या हुआ? – Mehrdad

+0

आप कॉफीस्क्रिप्ट सामान का प्रयास कर सकते हैं और संकलित परिणाम देख सकते हैं [यहां] (http://jashkenas.github.com/coffee-script/#try:array%20%3D%20 [1% 2C2% 2C3% 2C4]% 0A % 0% के लिए% 20%% 20in% 20array% 0A% 20% 20console.log% 20% 27inside% 20loop% 27% 2 सी% 20num% 0A% 0Aconsole.log% 20% 27outside% 20loop% 27% 2C% 20num% 0A) = डी – epidemian

उत्तर

17

नहीं, num लूप को स्कॉप्ड नहीं किया जाता है। जैसा कि आप संकलित जेएस में देख सकते हैं (जैसा कि @ एपिडेमियन ने बताया है) यह वर्तमान स्कोप वैरिएबल है, इसलिए आप इसे बाकी के फ़ंक्शन में भी एक्सेस कर सकते हैं (उदा। शेष दायरे में शेष)।

लेकिन पाश अंदर समारोह कॉलबैक को परिभाषित करने के मामले में सावधान रहना होगा:

array = [1, 2, 3] 

for num in array 
    setTimeout (() -> console.log num), 1 

आउटपुट

3 
3 
3 

कॉलबैक के भीतर वर्तमान चर पर कब्जा करने के लिए, आप do जो केवल फ़ंक्शन को कॉल करने का उपयोग करना चाहिए:

for num in array 
    do (num) -> 
     setTimeout (() -> console.log num), 1 
+1

कि एक मुश्किल एक हैह – mateusmaso

+0

मैंने इस गलती के साथ कुछ रमणीय दौड़ की स्थिति बनाई है, थके हुए – wmarbut

+0

बस इससे थोड़ा सा हो गया। मुझे लगता है कि 'करना (num) ->' डिफ़ॉल्ट व्यवहार होना चाहिए। – ndbroadbent

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