সেটইন্টারভাল ফাংশনে প্যারামিটারগুলি পাস করুন


320

দয়া করে একটি ফাংশন ব্যবহার করে নামক প্যারামিটার পাস কিভাবে পরামর্শ setInterval

আমার উদাহরণটি setInterval(funca(10,3), 500);ভুল।


2
সিনট্যাক্স:.setInterval(func, delay[, param1, param2, ...]);
ও -9

উত্তর:


543

আপনাকে একটি বেনামি ফাংশন তৈরি করতে হবে যাতে প্রকৃত ফাংশন এখনই সম্পাদন করা হয় না।

setInterval( function() { funca(10,3); }, 500 );

4
গতিশীল পরামিতি জন্য কি হওয়া উচিত?
রনি 36

28
@ রনি 36 - আপনি সম্ভবত এমন কোনও ফাংশন রাখতে চান যা আপনার জন্য বিরতি টাইমার তৈরি করে। ফাংশনে প্যারামিটারে পাস করুন যাতে এর মানটি ফাংশন বন্ধে ক্যাপচার হয় এবং টাইমারটি শেষ হয়ে যায় তখন ধরে রাখা হয়। function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }তারপরে একে একে কল করুন createInterval(funca,dynamicValue,500); অবশ্যই আপনি একাধিক প্যারামিটারের জন্য এটি প্রসারিত করতে পারেন। এবং, দয়া করে আরও বর্ণনামূলক চলক নাম ব্যবহার করুন। :)
tvanfosson

@ টানফসন: দুর্দান্ত উত্তর! আপনি কীভাবে ফাংশনের মধ্যে অন্তর ফর্মটি সাফ করবেন জানেন funca?
ফ্লো

ধন্যবাদ আমার খারাপ, তবে আমি আসলে মন্তব্য বিভাগে আপনি যে সৃজনশীল অভ্যন্তরীণ উদাহরণটি দিয়েছেন তা বোঝানো হয়েছিল। এটি কীভাবে কাজ করবে? আমি ডায়নামিক প্যারামিটার হিসাবে টাইমার ভেরিয়েবলটি পাস করার কথা ভাবছিলাম, তবে কীভাবে বা কীভাবে তা বোঝা যায় তা নিশ্চিত নয়। স্বচ্ছতার স্বার্থে আমি এখানে একটি নতুন প্রশ্ন যুক্ত করেছি: স্ট্যাকওভারফ্লো
ফ্লো

78

এখন ES5 দিয়ে, বাইন্ড পদ্ধতিতে ফাংশন প্রোটোটাইপ:

setInterval(funca.bind(null,10,3),500);

এখানে রেফারেন্স


2
এটি সেরা উত্তর, তবে এতে ফাংশনের উপর নির্ভর করে এটির অপ্রত্যাশিত আচরণ থাকতে পারে। যেমন console.log.bind(null)("Log me")নিক্ষেপ করবে Illegal invocationতবে console.log.bind(console)("Log me")প্রত্যাশা মতো কাজ করবে। এটি কারণ হিসাবে আর্গ হিসাবে console.logপ্রয়োজন । consolethis
ইন্দি

1
এখন পর্যন্ত সেরা উত্তর। পাতলা এবং পরিষ্কার। অনেক ধন্যবাদ!
টবি

খুব পরিষ্কার এবং দক্ষ!
পরিচিতিমেট

2
ক্রোম> = 7, ফায়ারফক্স> = 4.0, এক্সপ্লোরার> = 9, অপেরা> = 11.60, সাফারি> = 5.1 (উত্স: বিকাশকারী.মোজিলা.আর.সি. / ডকস / ওয়েবে / জাভা স্ক্রিপ্ট / রেফারেন্স/… ) এর সাথে কাজ করে এমনটি যুক্ত করুন
রজার ভেকিয়ানা

60

সেগুলি অন্তঃসত্ত্বায় পরামিতি হিসাবে যুক্ত করুন:

setInterval(funca, 500, 10, 3);

আপনার প্রশ্নের বাক্য বাক্যটি ইওল ব্যবহার করে, যা অনুশীলনের প্রস্তাব দেওয়া হয় না।


2
Whaa ?! কখন থেকে অনুমতি দেওয়া হয়েছিল? (গুরুতর প্রশ্ন)
ক্রিসেন্ট টাটকা

1
নিশ্চিত না. আমার উত্সটি ছিল: developer.mozilla.org/en/DOM/window.setInterval
কেভ

2
@ কেভ ইন্টারনেট এক্সপ্লোরার এটি একটি সত্যই জগাখিচুড়ি যা তর্কগুলি পাস করার পক্ষে সমর্থন করে না
শ্রেকওভারফ্লো

1
আইএমএইচও এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। সুন্দর, সহজ এবং পরিষ্কার সমাধান।
লাইটম্যান

32

আপনি প্যারামিটার (গুলি) ফাংশন অবজেক্টের সম্পত্তি হিসাবে পাস করতে পারেন, প্যারামিটার হিসাবে নয়:

var f = this.someFunction;  //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);

তারপরে আপনার কার্যক্রমে আপনার someFunctionপরামিতিগুলির অ্যাক্সেস থাকবে। এটি শ্রেণীর অভ্যন্তরে বিশেষত কার্যকর যেখানে স্কোপটি স্বয়ংক্রিয়ভাবে গ্লোবাল স্পেসে চলে যায় এবং আপনি ক্লাসটির উল্লেখ হারিয়ে ফেলেন যা শুরু করে সেটইন্টারওয়াল বলে। এই পদ্ধতির সাথে, উপরের উদাহরণে "কিছু কিছু" এর "প্যারামিটার 2" এর সঠিক সুযোগ থাকবে।


1
আপনি Classname.prototype.someFunction.parameter1
JoaquinG

2
কোনও বস্তু বা ফাংশনে প্যারামিটার যুক্ত করার ফলে সংকলকটি ধীর হয়ে যেতে পারে কারণ এটির জন্য এটির স্থানীয় কোড উপস্থাপনাটি পুনর্নির্মাণ করতে হবে (উদাহরণস্বরূপ যদি এটি একটি গরম লুপে করা হয়েছিল) তাই সাবধান হন।
mattdlockyer

22
     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

সেরা উত্তর দেওয়া।
Drk_alien

তাহলে অ্যারে হিসাবে যুক্তিগুলি কেন পাস করবেন? এই বিবরণ এমনকি প্রশ্নের সাথে সম্পর্কিত হয় না।
ব্যবহারকারী4642212


18
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);


এটি উপায় ভাল।
উগুর কাজডাল

এটি উপায় ভাল।
উগুর কাজডাল

11

এখন পর্যন্ত সর্বাধিক ব্যবহারিক উত্তর হ'ল টভানফসন দিয়ে দেওয়া, আমি যা করতে পারি তা হ'ল ইএস with সহ আপনাকে একটি আপডেট সংস্করণ দেওয়া:

setInterval( ()=>{ funca(10,3); }, 500);

1
আপনি কি বলছেন যে () => {function ফাংশন () {} প্রতিস্থাপনের জন্য ES6 এর নতুন উপায়? মজাদার. প্রথমত, আমি ভেবেছিলাম রকেটগুলি পাস করা হয়েছে। এবং, যদি না এই সিনট্যাক্সের অন্যান্য সাধারণ ব্যবহার না হয় তবে এটি কেবল খুব খুব বিজোড়। আমি দেখতে পাচ্ছি যে তারা "চর্বিযুক্ত তীর"। এখনও, অদ্ভুত। আমি অনুমান করি যে কেউ এটি পছন্দ করে এবং এটি মতের বিষয় a
রিচার্ড_জি

6

আর্গুমেন্টের উদ্ধৃতি যথেষ্ট হওয়া উচিত:

OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)

KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)

'প্রতিটি যুক্তির একক উদ্ধৃতি নোট করুন ।

আইই 8, ক্রোম এবং ফায়ারফক্সের সাথে পরীক্ষিত


7
ইভাল ব্যবহার করা একটি ভয়ানক অনুশীলন। বেনাম ফাংশন ব্যবহার আরও ভাল।
সুপারিরিস

1

আমি জানি এই বিষয়টি এত পুরানো তবে setIntervalফাংশনে পরামিতিগুলি পাস করার বিষয়ে আমার সমাধান এখানে ।

এইচটিএমএল:

var fiveMinutes = 60 * 2;
var display = document.querySelector('#timer');
startTimer(fiveMinutes, display);

javascript:

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()এই পরিস্থিতিতে কীভাবে করবেন ?
ব্যবহারকারী 1063287

0

এটি কাজ করে setInterval("foo(bar)",int,lang);.... জোন ক্লেজার আমাকে উত্তরটিতে নিয়ে যায়।


0

আর একটি সমাধান আপনার ফাংশনটি পাসের মতো করে থাকে (যদি আপনি ডায়নামিক্স ওয়ার পেয়ে থাকেন): সেটইন্টারভালভাল ('ফানকা (' + এক্স + ',' + ওয়াই + ')', 500);


0

আপনি আন্ডারস্কোর জেএস নামে একটি লাইব্রেরি ব্যবহার করতে পারেন। এটি বাইন্ড পদ্ধতিতে একটি দুর্দান্ত মোড়ক দেয় এবং এটি আরও অনেকগুলি ক্লিনার সিনট্যাক্স। আপনাকে নির্দিষ্ট স্কোপটিতে ফাংশনটি কার্যকর করতে দেওয়া।

http://underscorejs.org/#bind

_ বাইন্ড (ফাংশন, সুযোগ, * যুক্তি)


0

এই সমস্যাটি ক্লোজারগুলির ব্যবহারের জন্য দুর্দান্ত প্রদর্শন হবে। ধারণাটি হ'ল কোনও ফাংশন বাইরের স্কোপের একটি পরিবর্তনশীল ব্যবহার করে। এখানে একটি উদাহরণ ...

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

ret = function(){
    console.log("Hello, " + name);
}

return ret;
}

ফাংশন "মেকক্লোজার" আরও একটি ফাংশন প্রদান করে, এতে বাহ্যিক স্কোপ ভেরিয়েবল "নাম" অ্যাক্সেস রয়েছে। সুতরাং, মূলত, আপনার "মেকক্লোজার" ফাংশনে যে পরিমাণ ভেরিয়েবল পাস করতে হবে এবং সেগুলি "ret" ভেরিয়েবলের জন্য নির্ধারিত ফাংশনে ব্যবহার করতে হবে। প্রভাবশালীভাবে, সেটইন্টারওয়াল "ret" এর জন্য নির্ধারিত ফাংশন সম্পাদন করবে।


0

ভ্যু অ্যাপ্লিকেশনটিতে আমার একই সমস্যা ছিল। আমার ক্ষেত্রে এই সমাধানটি কেবল তখনই কার্যকর হয় যদি অজানা ফাংশনটি তীর ফাংশন হিসাবে mounted ()লাইফ সার্কেল হুকের ঘোষণার বিষয়ে ঘোষণা করে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.