में फ़ंक्शंस बनाना हाल ही में, मुझे खुद को कार्यों की एक सरणी बनाने की आवश्यकता है। फ़ंक्शन किसी XML दस्तावेज़ से मानों का उपयोग करते हैं, और मैं लूप के साथ उचित नोड्स के माध्यम से चल रहा हूं। हालांकि, ऐसा करने पर, मैंने पाया कि एक्सएमएल शीट का अंतिम नोड (लूप के अंतिम भाग के अनुरूप) का उपयोग कभी भी सरणी के सभी कार्यों द्वारा किया जाता था।जावास्क्रिप्ट: फॉर लूप
var numArr = [];
var funArr = [];
for(var i = 0; i < 10; ++i){
numArr[numArr.length] = i;
funArr[funArr.length] = function(){ return i; };
}
window.alert("Num: " + numArr[5] + "\nFun: " + funArr[5]());
उत्पादन अंक है: 5 और मज़ा:
निम्नलिखित एक उदाहरण है कि इस प्रदर्शन किया जाता है 10
अनुसंधान पर, मैंने एक a segment of code that works पाया, लेकिन मैं ठीक से समझने के लिए संघर्ष कर रहा हूँ यह क्यों काम करता है। मैं इसे यहाँ reproduced मेरे उदाहरण का उपयोग:
var funArr2 = [];
for(var i = 0; i < 10; ++i)
funArr2[funArr2.length] = (function(i){ return function(){ return i;}})(i);
window.alert("Fun 2: " + funArr2[5]());
मैं जानता हूँ कि यह scoping के साथ क्या करना है, लेकिन पहली नजर में ऐसा प्रतीत नहीं होता है जैसे कि यह मेरी भोली दृष्टिकोण से अलग ढंग से किसी भी प्रदर्शन करेंगे। मैं जावास्क्रिप्ट में कुछ शुरुआती हूं, इसलिए यदि मैं पूछ सकता हूं, तो यह क्यों है कि इस फ़ंक्शन-रिटर्निंग-ए-फ़ंक्शन तकनीक का उपयोग स्कोपिंग समस्या को छोड़ देता है? इसके अलावा, (i) अंत में क्यों शामिल है?
अग्रिम में बहुत बहुत धन्यवाद।
मैं जेएस में नया हूं, इसलिए बहुत कुछ धन्यवाद, आपकी पोस्ट के बाद मैंने सीखा कि कार्यों को कैसे बनाएं (मेरे मामले में कॉलबैक) गतिशील रूप से! – mineroot
बेहद सहायक। यहां मेरी समस्या को हल करने के लिए बस इसका इस्तेमाल किया गया। http://stackoverflow.com/questions/41254076/preventing-lazy-evaluation-in-function-called-by-fabric-js/41254197#41254197 बहुत धन्यवाद। –