2013-12-08 8 views
6

पर पैरामीटर कैसे पास करें, मैं उस फ़ंक्शन को तुरंत कॉल किए बिना कॉलबैक फ़ंक्शन में पैरामीटर को सही तरीके से पास करने के तरीके पर फंस गया हूं।जावास्क्रिप्ट: कॉलबैक फ़ंक्शन

उदाहरण के लिए, इस अपेक्षा के अनुरूप काम करेगा:

var callBack = function() { ... } 
window.setTimeout(callBack, 1000); 

लेकिन इस गलती से callBack कॉल करेगा:

var callBack = function(param1, param2) { ... } 
window.setTimeout(callBack('foo','bar'), 1000); 

उत्तर

7

आप इसे इस रूप में कॉल कर सकते हैं,

var callBack = function(param1, param2) { ... } 
window.setTimeout(function(){callBack('foo','bar');}, 1000); 
+0

यहां किसी अज्ञात फ़ंक्शन की आवश्यकता नहीं है - यह केवल कोड को अव्यवस्थित करता है। Settimeout फ़ंक्शन इसके कॉलबैक में तर्क गुजरने का समर्थन करता है - तो इसका उपयोग क्यों न करें? – Lix

+1

@Lix दोनों तरीकों को स्वीकार्य है, हालांकि कॉलबैक के तर्कों को पार करते हुए मुझे लगता है कि यानी समर्थित नहीं है। – melc

+0

@Lix फिर भी मुझे खुशी है कि यह उत्तर पोस्ट किया गया था क्योंकि यह एक और सामान्य समाधान दिखाता है जो काम करता है जब कॉलबैक लेने वाला फ़ंक्शन सीबी के लिए भी तर्क नहीं लेता है। अब केवल 'बाइंड() 'गायब है (उल्लेख किया जाना चाहिए, अधिक नहीं) :) –

8

रास्ता पैरामीटर पास करने के लिए the documentation of settimeout() में बताए गए समय पैरामीटर के बाद है।

var timer = window.setTimeout(func, delay, [ param1, param2, ... ] 

पहला तर्क, वास्तविक कॉलबैक है दूसरा मिलीसेकंड में समय आ गया है और पिछले (वैकल्पिक) तर्क मानकों की एक सरणी कॉलबैक करने के लिए पारित करने के लिए है।

तो, आपके उदाहरण के लिए यह की तरह कुछ होगा:

window.setTimeout(callBack, 1000, [ "foo", "bar" ]); 

अपने प्रश्न का शीर्षक थोड़ा भ्रामक है के रूप में एक कॉलबैक फ़ंक्शन पर पैरामीटर भेजने के लिए इस्तेमाल किया विधि कोड है कि के कार्यान्वयन में अलग है उसका इस्तेमाल कर रहे हैं। जैसा कि आप कल्पना कर सकते हैं, वास्तविक फ़ंक्शन ऑब्जेक्ट और इसके पैरामीटर को एक साथ पारित करने की आवश्यकता नहीं है क्योंकि फ़ंक्शन निष्पादन बाद में स्थगित कर दिया गया है; केवल तभी पैरामीटर कॉलबैक के संपर्क में आने की आवश्यकता है।


कैसे एक कॉलबैक वस्तु को तर्क पारित करने के लिए आप इस पोस्ट पर एक नज़र ले जा सकते हैं की एक अधिक सामान्य विवरण के लिए: JavaScript: Passing parameters to a callback function

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