Câu trả lời:
Bạn cần tạo một hàm ẩn danh để chức năng thực tế không được thực thi ngay lập tức.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Sau đó gọi nó là createInterval(funca,dynamicValue,500);
Rõ ràng bạn có thể mở rộng điều này cho nhiều hơn một tham số. Và, xin vui lòng, sử dụng tên biến mô tả nhiều hơn. :)
funca
?
bây giờ với ES5, phương thức liên kết Nguyên mẫu hàm:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
sẽ ném Illegal invocation
, nhưng console.log.bind(console)("Log me")
sẽ làm việc như mong đợi. Điều này là do console.log
yêu cầu console
như các this
arg.
Thêm chúng làm tham số cho setInterval:
setInterval(funca, 500, 10, 3);
Cú pháp trong câu hỏi của bạn sử dụng eval, không được khuyến khích thực hành.
Bạn có thể truyền (các) tham số làm thuộc tính của đối tượng hàm, không phải là tham số:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
Sau đó, trong chức năng của bạn someFunction
, bạn sẽ có quyền truy cập vào các tham số. Điều này đặc biệt hữu ích bên trong các lớp nơi phạm vi tự động đi vào không gian toàn cầu và bạn mất các tham chiếu đến lớp được gọi là setInterval để bắt đầu. Với cách tiếp cận này, "tham số2" trong "someFunction", trong ví dụ trên, sẽ có phạm vi phù hợp.
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
Bạn có thể sử dụng một chức năng ẩn danh;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
Cập nhật: 2018 - sử dụng toán tử "lây lan"
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
Cho đến nay, câu trả lời thiết thực nhất là câu trả lời của tvanfosson, tất cả những gì tôi có thể làm là cung cấp cho bạn phiên bản cập nhật với ES6:
setInterval( ()=>{ funca(10,3); }, 500);
Trích dẫn các đối số là đủ:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
Lưu ý trích dẫn duy nhất '
cho mỗi đối số.
Đã thử nghiệm với IE8, Chrome và FireFox
Tôi biết chủ đề này rất cũ nhưng đây là giải pháp của tôi về việc truyền tham số trong setInterval
hàm.
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
), nhưng làm thế nào để bạn clearInterval()
trong kịch bản này?
Bạn có thể sử dụng một thư viện được gọi là js gạch dưới. Nó cung cấp một trình bao bọc đẹp cho phương thức liên kết và cũng là một cú pháp gọn gàng hơn nhiều. Để bạn thực hiện chức năng trong phạm vi được chỉ định.
_.bind (hàm, phạm vi, * đối số)
Vấn đề đó sẽ là một minh chứng tốt đẹp cho việc sử dụng các bao đóng. Ý tưởng là một hàm sử dụng một biến có phạm vi bên ngoài. Đây là một ví dụ...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
Hàm "makeClences" trả về một hàm khác, có quyền truy cập vào "tên" biến phạm vi bên ngoài. Vì vậy, về cơ bản, bạn cần truyền vào bất kỳ biến nào cho hàm "makeClenses" và sử dụng chúng trong hàm được gán cho biến "ret". Ảnh hưởng, setInterval sẽ thực thi chức năng được gán cho "ret".
Tôi đã có cùng một vấn đề với ứng dụng Vue. Trong trường hợp của tôi, giải pháp này chỉ hoạt động nếu chức năng ẩn danh đã khai báo là chức năng mũi tên, liên quan đến khai báo tại mounted ()
móc vòng đời.
.setInterval(func, delay[, param1, param2, ...]);