سؤال

يرجى تقديم المشورة حول كيفية تمرير المعلمات إلى وظيفة تسمى استخدام setInterval.

المثال الخاص بي setInterval(funca(10,3), 500); غير صحيح.

هل كانت مفيدة؟

المحلول

وتحتاج إلى إنشاء وظيفة غير معروفة حتى وظيفة الفعلي لا يتم تنفيذ على الفور.

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

نصائح أخرى

الآن مع ES5، النموذج الأولي لوظيفة طريقة الربط:

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

مرجع هنا

وإضافتها كمعلمات إلى setInterval:

setInterval(funca, 500, 10, 3);

وبناء الجملة في سؤالك يستخدم وحدة التقييم والتي لا ينصح الممارسة.

يمكنك تمرير المعلمة (المعلمات) كخاصية لكائن الوظيفة، وليس كمعلمة:

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

ثم في وظيفتك someFunction, ، سيكون لديك حق الوصول إلى المعلمات.يعد هذا مفيدًا بشكل خاص داخل الفئات حيث ينتقل النطاق إلى المساحة العامة تلقائيًا وتفقد المراجع إلى الفئة التي تسمى setInterval في البداية.باستخدام هذا الأسلوب، سيكون لـ "parameter2" في "someFunction"، في المثال أعلاه، النطاق الصحيح.

     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، والكروم وفايرفوكس

أعلم أن هذا الموضوع قديم جدًا ولكن هذا هو الحل الخاص بي حول تمرير المعلمات 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);
}

هذا يعمل setInterval("foo(bar)",int,lang);.... جون كليزر تقودني إلى الجواب.

وهناك حل آخر يتمثل في تمرير وظيفة الخاص بك من هذا القبيل (إذا كنت قد حصلت على ديناميات دوال اللغة): setInterval ( 'funca (' + س + '،' + ص + ')'، 500)؛

ويمكنك استخدام مكتبة دعا تسطير شبيبة. أنه يعطي المجمع لطيفة على طريقة ربط وهو تركيب أنظف بكثير أيضا. مما يتيح لك تنفيذ وظيفة في نطاق محدد.

http://underscorejs.org/#bind

و_. ربط (وظيفة ونطاقها و* الحجج)

وهذه المشكلة ستكون مظاهرة لطيفة للاستخدام من الإغلاق. والفكرة هي أن تستخدم وظيفة متغير نطاق الخارجي. هنا مثال ...

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

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

return ret;
}

وظيفة "makeClosure" يعود ظيفة أخرى، والذي لديه حق الوصول إلى نطاق الخارجي المتغير "اسم". لذلك، أساسا، تحتاج تمر بأي المتغيرات إلى وظيفة "makeClosure" واستخدامها في وظيفة خصصت "متقاعد" متغير. Affectingly، سوف setInterval تنفيذ الدالة المخصصة ل"متقاعد".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top