2011-08-24 8 views
7

मेरे पास "tryMe" नामक एक फ़ंक्शन है और मैं इसे बिना किसी कंसोलिसिस के कॉल कर रहा हूं, लेकिन यह विचार यह है कि आप यहां क्या करेंगे:ब्रांड्स के बिना फ़ंक्शन को कॉल करते समय पैरामीटर को कैसे पास करें [जावास्क्रिप्ट]

setTimeout(tryMe,200); 

मुझे आवश्यक पैरामीटर कैसे पास कर सकते हैं?

मैं एक jquery प्लगइन का उपयोग कर रहा हूं जो मुझे फ़ंक्शन कॉल करने में सक्षम बनाता है लेकिन मुझे इसे ब्रांडेसिस के साथ कॉल करना होगा या इसे लोड होने पर स्वयं निष्पादित करना होगा।

+1

यह निष्पादित करता है क्योंकि फ़ंक्शन का मूल्यांकन किया जाता है और फ़ंक्शन का परिणाम 'सेटटाइमआउट' पर पास किया जाता है; जैसा कि आप उम्मीद कर रहे हैं कार्य स्वयं ही पारित नहीं होता है। – Marc

+2

यह वर्णन करना सटीक नहीं है कि आप क्या कर रहे हैं, "ब्रांड्स के बिना फ़ंक्शन को कॉल करना"। फ़ंक्शन को आपके प्रश्न में पोस्ट किए गए कथन में नहीं कहा जाता है।इसके बजाय, आपके फ़ंक्शन के लिए * संदर्भ * किसी अन्य फ़ंक्शन ('setTimeout') को पास किया जाता है, जो कुछ समय (200 मिलीसेकंड बाद में) वास्तव में आपके फ़ंक्शन ** को ** कोष्ठक (अवधारणात्मक) के साथ कॉल करेगा। फिर भी, आप यहां क्या पूछ रहे हैं भ्रम का एक बहुत ही आम बिंदु है, और जवाब शायद ही स्पष्ट है। – Pointy

+0

@ मुझे सूचित करने के लिए धन्यवाद धन्यवाद =) – Tsundoku

उत्तर

11
setTimeout(function() { tryMe(parm1, parm2); }, 200); 

एक और अधिक मजबूत भेंट, यह सुनिश्चित करें कि parm1 के मूल्यों, parm2 टाइमआउट सक्रिय होने से पहले (@ lincolnk की टिप्पणी के अनुसार) में परिवर्तन नहीं करते:

setTimeout(function() { 
    var p1 = parm1; 
    var p2 = parm2; 
    tryMe(p1, p2); 
}, 200); 

@ पैट्रिक dw, आप सही हैं, पहले मूल्यांकन किया जाना है।

+3

बस सुनिश्चित करें कि आप टाइमआउट आग से पहले अपने पैरामीटर मानों को नहीं बदल रहे हैं। – lincolnk

+1

आपका अपडेट मूल से अलग व्यवहार नहीं करेगा। 'सेटटाइमआउट' कहलाते समय मौजूद मानों को सुनिश्चित करने के लिए, आपको * एक समारोह * को आमंत्रित करना होगा, उन्हें * उस * फ़ंक्शन में स्थानीय रूप से संदर्भित करना होगा, और फ़ंक्शन को एक फ़ंक्शन वापस करना होगा जो स्थानीय रूप से परिभाषित संदर्भों का संदर्भ देता है। – user113716

+0

__setTimeout (tryMe.bind (विंडो, परम 1, पार्म 2), 200) का उपयोग करने के लिए अधिक सुरुचिपूर्ण तरीका है; __। बाइंड() IE8 या उससे कम द्वारा समर्थित नहीं है, लेकिन जावास्क्रिप्ट समकक्ष के साथ कार्यान्वित किया जा सकता है। –

4

आप एक बंद में tryMe लपेट सकते हैं।

उदाहरण के लिए:

var f = function(){tryMe('some parameter');}; 
setTimeout(f, 200); 

यहाँ, हम एक समारोह वस्तु, f, जो वांछित पैरामीटर (रों) के साथ tryMe कॉल पैदा करते हैं। फिर हम f से setTimeout पास करते हैं। जब टाइमआउट समाप्त हो जाता है, f कहा जाएगा, जो वांछित पैरामीटर के साथ बदले में tryMe पर कॉल करेगा।

चेतावनी का एक शब्द अगर आप पैरामीटर टाइमआउट से पहले बदल सकता है में पारित करने के लिए चाहते हैं कहा जाता हो जाता है (उदाहरण के लिए, यदि आप एक for पाश में कई समय समाप्ति सेट कर रहे हैं): तुम इतनी तरह वे चर बाध्य करने के लिए चाहते हैं:

var f = function(someParamter){return function(){tryMe(someParameter);};}; 
setTimeout(f(someParameter), 200); 

कारण बस की तरह

setTimeout(tryMe('some parameter'), 200); //Does not work. 

कुछ कर काम नहीं करता है, क्योंकि आप समारोह वस्तु tryMe खुद के बजाय tryMe के मूल्यांकन का परिणाम गुजर रहे हैं।

+0

यह सही जवाब होना चाहिए –

0

आप फ़ंक्शन को कॉल नहीं कर रहे हैं, ब्राउज़र करता है - 200 मिलीसेकंड के बाद। आप इसे केवल उस समारोह के साथ प्रदान कर रहे हैं जिसे कॉल करने की आवश्यकता है। फ़ायरफ़ॉक्स वास्तव में setTimeout कॉल में अतिरिक्त पैरामीटर निर्दिष्ट करने की अनुमति देता है:

setTimeout(tryMe, 200, "first parameter", "second parameter"); 

हालांकि, मैं कोई अन्य ब्राउज़रों इस सुविधा का समर्थन तो आप वास्तव में एक बंद समारोह के रूप में पहले से ही अन्य उत्तर से समझाया का उपयोग करना चाहिए पता है जहाँ तक। यहां आप अपने मूल कार्य को सही पैरामीटर के साथ कॉल करने के एकमात्र उद्देश्य के साथ एक अस्थायी फ़ंक्शन बनाते हैं।

setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);