setInterval
โปรดให้คำแนะนำวิธีการส่งผ่านพารามิเตอร์ในการทำงานที่เรียกว่าใช้
ตัวอย่างของฉันsetInterval(funca(10,3), 500);
ไม่ถูกต้อง
setInterval
โปรดให้คำแนะนำวิธีการส่งผ่านพารามิเตอร์ในการทำงานที่เรียกว่าใช้
ตัวอย่างของฉันsetInterval(funca(10,3), 500);
ไม่ถูกต้อง
คำตอบ:
คุณต้องสร้างฟังก์ชั่นที่ไม่ระบุตัวตนเพื่อที่จะไม่ได้ใช้งานฟังก์ชันได้ทันที
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")
จะทำงานตามที่คาดไว้ นี่เป็นเพราะconsole.log
ต้องการconsole
เป็นthis
อาร์กิวเมนต์
เพิ่มเป็นพารามิเตอร์เพื่อ setInterval:
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 เพื่อเริ่มต้นด้วย ด้วยวิธีการนี้ "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 - ใช้ตัวดำเนินการ "spread"
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
ฟังก์ชั่น
Html:
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()
ในสถานการณ์นี้
งานนี้setInterval("foo(bar)",int,lang);
.... Jon Kleiserพาฉันไปที่คำตอบ
โซลูชันอื่นประกอบด้วยการส่งผ่านฟังก์ชันของคุณเช่นนั้น (หากคุณมี vars ไดนามิก): setInterval ('funca (' + x + ',' + y + ')', 500);
คุณสามารถใช้ไลบรารีชื่อ underscore js มันให้เสื้อคลุมที่ดีในวิธีการผูกและเป็นไวยากรณ์ที่สะอาดมากเช่นกัน ให้คุณเรียกใช้ฟังก์ชันในขอบเขตที่ระบุ
_.bind (ฟังก์ชันขอบเขตขอบเขต *)
ปัญหานั้นจะเป็นการสาธิตที่ดีสำหรับการใช้งานการปิด แนวคิดก็คือฟังก์ชั่นใช้ตัวแปรขอบเขตด้านนอก นี่คือตัวอย่าง ...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
ฟังก์ชัน "makeClosure" ส่งคืนฟังก์ชันอื่นซึ่งมีการเข้าถึงตัวแปรชื่อขอบเขต "นอก" ดังนั้นโดยพื้นฐานแล้วคุณต้องผ่านตัวแปรใด ๆ ในฟังก์ชั่น "makeClosure" และใช้มันในฟังก์ชั่นที่กำหนดให้กับตัวแปร "ret" อย่างตั้งใจ setInterval จะใช้งานฟังก์ชั่นที่กำหนดให้กับ "ret"
ฉันมีปัญหาเดียวกันกับแอพ Vue ในกรณีของฉันการแก้ปัญหานี้ใช้ได้เฉพาะเมื่อฟังก์ชันที่ไม่ระบุชื่อได้ประกาศเป็นฟังก์ชันลูกศรซึ่งเกี่ยวข้องกับการประกาศที่mounted ()
hook circle life
.setInterval(func, delay[, param1, param2, ...]);