2009-04-28 9 views
12

setTimeout का उपयोग करते समय, आपको उस कोड को रखना होगा जिसे आप स्ट्रिंग में निष्पादित करना चाहते हैं:setTimeout - कॉलबैक के लिए स्ट्रिंग का उपयोग करने से कैसे बचें?

setTimeout('alert("foobar!");', 1000); 

हालांकि, मैं एक फ़ंक्शन निष्पादित करना चाहता हूं जिसमें मेरे पास एक चर में संदर्भ है। मैं ऐसा करने में सक्षम होना चाहता हूं:

var myGreatFunction = function() { alert("foobar!"); }; 
// ... 
setTimeout('myGreatFunction();', 1000); 

(हालांकि वास्तविक जीवन में, अलर्ट कोड का एक लंबा हिस्सा है और myGreatFunction अन्य कार्यों के पैरामीटर के रूप में पारित हो जाता है, जिसमें setTimeout कहा जाता है।)

बेशक, जब टाइमआउट ट्रिगर होता है, myGreatFunction एक मान्यता प्राप्त फ़ंक्शन नहीं है, इसलिए यह निष्पादित नहीं होता है।

मेरी इच्छा है कि जावास्क्रिप्ट मुझे ऐसा करने दें, लेकिन यह नहीं करता है:

setTimeout(function() { myGreatFunction(); }, 1000); 

क्या इसके चारों ओर एक अच्छा तरीका है?

+4

"setTimeout उपयोग करते समय, आप कोड आप एक स्ट्रिंग में निष्पादित करने के लिए चाहते हैं डाल करने के लिए है" तुम सबसे निश्चित रूप से नहीं ... वास्तव में, आप not_ _should है। –

+0

@ टोमालक - हाँ, आप सही हैं। कीर्तन के उत्तर पर टिप्पणी देखें ...:/ – teedyay

+0

असल में मैंने इसे देखा; हाँ, तुम सही हो - बस किसी और की खातिर जो सवाल :) –

उत्तर

28

आप किसी भी तर्क के साथ myGreatFunction कॉल करने के लिए की जरूरत नहीं है, तो आप setTimeout पारित करने के लिए एक समारोह संदर्भ में सक्षम होना चाहिए:,

setTimeout(myGreatFunction, 1000); 

इसके अलावा, आप हमेशा setTimeout कोड है कि यह मूल्यांकन करने के लिए की जरूरत है गुजर से बचना चाहिए (जब आप कोट्स में कोड लपेटते हैं तो यही होता है)। इसके बजाय, एक गुमनाम समारोह में कोड लपेट:

setTimeout(function() { 
    // Code here... 
}, 1000); 

अधिक जानकारी के लिए setTimeout page at the Mozilla Development Centre देखें।

स्टीव

14

किसने कहा यह आप इसे करते हैं यह नहीं है कि?

यह करता है, कोड -

setTimeout(function() { myFunction(); }, 1000); 

पूरी तरह से वैध है।

+9

Haha देख सकते हैं के लिए यहाँ स्पष्ट बनना चाहता था। एक असंबंधित बग का मतलब यह हुआ कि यह वास्तव में था जब मेरे समारोह को बुलाया नहीं जा रहा था। यह मुझे अपने स्वयं के प्रश्न को कम करने की इच्छा रखने की थोड़ी शर्मनाक स्थिति में छोड़ देता है ... – teedyay

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