2010-06-11 12 views
13
for (var i = 0; i < somearray.length; i++) 
{ 
    myclass.foo({'arg1':somearray[i][0]}, function() 
    { 
     console.log(somearray[i][0]); 
    }); 
} 

मैं अज्ञात फ़ंक्शन में कुछएरे या इसकी अनुक्रमणिका को कैसे पास करूं? somearray वैश्विक क्षेत्र में पहले से ही है, लेकिन मैं अभी भी somearray [i] अपरिभाषितजावास्क्रिप्ट बेनामी फंक्शन के लिए तर्क

+0

यह एक आम समस्या है - सभी संबंधित प्रश्नों http: // stackoverflow। कॉम/प्रश्न/टैग/जावास्क्रिप्ट + बंद + लूप – Anurag

उत्तर

29

i गुमनाम समारोह में चरi, न कि उसकी मूल्य कैप्चर करता है। लूप के अंत तक, isomearray.length के बराबर है, इसलिए जब आप फ़ंक्शन का आह्वान करते हैं तो यह एक गैर-मौजूदा तत्व सरणी तक पहुंचने का प्रयास करता है।

आप एक समारोह-निर्माण समारोह है कि वेरिएबल का मान कब्जा करके इसे ठीक कर सकते हैं:

function makeFunc(j) { return function() { console.log(somearray[j][0]); } } 

for (var i = 0; i < somearray.length; i++) 
{ 
    myclass.foo({'arg1':somearray[i][0]}, makeFunc(i)); 
} 

makeFunc तर्क i नामित किया गया है सकते हैं, लेकिन मुझे लगता है कि यह एक अलग चर दिखाने के लिए यह j बुलाया लूप में इस्तेमाल किए गए एक से।

+0

+1 समस्या का एक अच्छा स्पष्टीकरण देने के साथ-साथ समाधान प्रदान करने के लिए! – Matt

+0

मुझे आपका अंक मिला। धन्यवाद। लेकिन मैं सिर्फ यह समझ नहीं सकता कि makeFunc को कैसे कॉल करें। – Phonethics

+0

बहुत बढ़िया! मुझे मेरी समस्या हल हो गई। जावास्क्रिप्ट में यह मेरे लिए पूरी तरह से एक नई बात है! – Phonethics

-2

सभी कार्यों/तरीकों केवल कॉलबैक के रूप में इस्तेमाल किया जा सकता है। जब आप कॉलबैक फ़ंक्शन को कॉल करते हैं तो आप इसे चर भेजते हैं।

var myclass = { 
    foo: function(params, callback){ 
    // do some stuff 
    callback(variable1, variable1, variableN); 
    } 
} 
9

कैसे एक बंद करने के बारे:

for (var i = 0; i < somearray.length; i++) { 
    var val = somearray[i][0]; 
    myclass.foo({'arg1': val}, function(v) { 
     return function() {console.log(v) }; 
    }(val)); 
} 
0
for (var i = 0; i < somearray.length; i++) 

{ 
    myclass.foo({'arg1':somearray[i][0]}, function(somearray) 
    { 
     console.log(somearray[i][0]); 
    }); 
} 

और फिर परम विधि foo कॉल गुमनाम समारोह में।

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