जवाबों:
आपको एक अनाम फ़ंक्शन बनाने की आवश्यकता है ताकि वास्तविक फ़ंक्शन तुरंत निष्पादित न हो।
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
फिर इसे createInterval(funca,dynamicValue,500);
स्पष्ट रूप से कॉल करें आप इसे एक से अधिक पैरामीटर के लिए बढ़ा सकते हैं। और, कृपया, अधिक वर्णनात्मक चर नाम का उपयोग करें। :)
funca
?
console.log.bind(null)("Log me")
फेंक देंगे Illegal invocation
, लेकिन console.log.bind(console)("Log me")
उम्मीद के मुताबिक काम करेंगे। यह इसलिए है क्योंकि arg के रूप में console.log
आवश्यक है । console
this
उन्हें मापदंडों के रूप में जोड़ें
setInterval(funca, 500, 10, 3);
आपके प्रश्न का सिंटैक्स eval का उपयोग करता है, जो अनुशंसित अभ्यास नहीं है।
आप फ़ंक्शन ऑब्जेक्ट की संपत्ति के रूप में पैरामीटर (नों) को पास कर सकते हैं, पैरामीटर के रूप में नहीं:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
तब आपके फ़ंक्शन में someFunction
, आपके पास मापदंडों तक पहुंच होगी। यह उन वर्गों के अंदर विशेष रूप से उपयोगी है, जहां गुंजाइश स्वचालित रूप से वैश्विक स्थान पर जाती है और आप उस वर्ग के संदर्भ खो देते हैं जिसे शुरू करने के लिए setInterval कहा जाता है। इस दृष्टिकोण के साथ, "someFunction" में "पैरामीटर 2", ऊपर के उदाहरण में, सही गुंजाइश होगी।
setInterval(function(a,b,c){
console.log(a + b +c);
}, 500, 1,2,3);
//note the console will print 6
//here we are passing 1,2,3 for a,b,c arguments
// tested in node v 8.11 and chrome 69
आप एक अनाम फ़ंक्शन का उपयोग कर सकते हैं;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
अपडेट: 2018 - "प्रसार" ऑपरेटर का उपयोग करें
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
अब तक का सबसे व्यावहारिक उत्तर tvanfosson द्वारा दिया गया है, सभी मैं आपको ES6 के साथ एक अद्यतन संस्करण दे सकता हूं:
setInterval( ()=>{ funca(10,3); }, 500);
तर्कों का उद्धरण पर्याप्त होना चाहिए:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
'
प्रत्येक तर्क के लिए एकल उद्धरण नोट करें ।
IE8, Chrome और FireFox के साथ परीक्षण किया गया
मुझे पता है कि यह विषय इतना पुराना है, लेकिन यहां setInterval
फ़ंक्शन में पैरामीटर पारित करने के बारे में मेरा समाधान है।
एचटीएमएल:
var fiveMinutes = 60 * 2;
var display = document.querySelector('#timer');
startTimer(fiveMinutes, display);
जावास्क्रिप्ट:
function startTimer(duration, display) {
var timer = duration,
minutes, seconds;
setInterval(function () {
minutes = parseInt(timer / 60, 10);
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
--timer; // put boolean value for minus values.
}, 1000);
}
timer
), लेकिन आप clearInterval()
इस परिदृश्य में कैसे हैं ?
आप अंडरस्कोर js नामक लाइब्रेरी का उपयोग कर सकते हैं। यह बाँध विधि पर एक अच्छा आवरण देता है और साथ ही एक बहुत अधिक स्वच्छ वाक्यविन्यास है। आपको निर्दिष्ट दायरे में फ़ंक्शन निष्पादित करने देता है।
_.bind (कार्य, कार्यक्षेत्र, * तर्क)
यह समस्या क्लोजर के उपयोग के लिए एक अच्छा प्रदर्शन होगा। विचार यह है कि एक फ़ंक्शन बाहरी दायरे के एक चर का उपयोग करता है। यहाँ एक उदाहरण है...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
फ़ंक्शन "मेक क्लोजर" एक और फ़ंक्शन देता है, जिसमें बाहरी गुंजाइश चर "नाम" तक पहुंच होती है। तो, मूल रूप से, आपको "मेक क्लोजर" फ़ंक्शन को जो भी चर में पास करने की आवश्यकता होती है और उन्हें "रिट" वेरिएबल को सौंपे गए फ़ंक्शन में उपयोग करें। प्रभावित होकर, setInterval "ret" को सौंपे गए फंक्शन को निष्पादित करेगा।
मुझे Vue ऐप में भी यही समस्या है। मेरे मामले में यह समाधान केवल तभी काम करता है जब mounted ()
जीवन चक्र हुक पर घोषणा के संबंध में अनाम फ़ंक्शन ने तीर फ़ंक्शन के रूप में घोषित किया है ।
.setInterval(func, delay[, param1, param2, ...]);