Cách chuyển tham số trong khi gọi hàm bằng cách sử dụng setInterval. viz. setInterval('funca(10,3)',500);
không chính xác.Truyền tham số trong hàm setInterval
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);
Thêm chúng như các tham số để setInterval:
setInterval(funca, 500, 10, 3);
Cú pháp trong câu hỏi của bạn sử dụng eval, mà không được khuyến khích thực hành.
này hoạt động setInterval("foo(bar)",int,lang);
.... Jon Kleiser đưa tôi đến với câu trả lời.
Bạn có thể vượt qua các tham số (s) như một thuộc tính của đối tượng chức năng, không phải là một 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 thông số. Điều này đặc biệt hữu ích bên trong các lớp mà phạm vi đi vào không gian toàn cầu tự động và bạn mất tham chiếu đến lớp được gọi là setInterval để bắt đầu. Với phương pháp này, "parameter2" trong "someFunction", trong ví dụ trên, sẽ có phạm vi phù hợp.
Bạn có thể truy cập theo Classname.prototype.someFunction.parameter1 – JoaquinG
Việc thêm tham số vào đối tượng hoặc hàm có thể làm cho trình biên dịch chậm lại vì nó sẽ phải xây dựng lại biểu diễn mã gốc của đối tượng (ví dụ nếu điều này được thực hiện trong một nóng vòng lặp) vì vậy hãy cẩn thận. – mattdlockyer
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 ý các dấu nháy đơn '
cho mỗi đối số.
Thử nghiệm với IE8, Chrome và FireFox
Sử dụng eval là một thực tế khủng khiếp. Việc sử dụng chức năng ẩn danh là cách tốt hơn. – SuperIRis
bây giờ với ES5, ràng buộc phương pháp hàm nguyên mẫu:
setInterval(funca.bind(null,10,3),500);
Đây là câu trả lời hay nhất, tuy nhiên nó có thể có hành vi không mong muốn tùy thuộc vào chức năng. ví dụ. '' console.log.bind (null) ("Log me") '' sẽ ném '' Invocation bất hợp pháp'', nhưng '' console.log.bind (console) ("Log me") '' sẽ hoạt động như mong đợi . Điều này là do '' console.log'' yêu cầu '' console'' là '' this'' arg. – Indy
Đến nay câu trả lời tốt nhất. Lean và sạch sẽ. Cảm ơn rất nhiều! – Tobi
Rất sạch sẽ và hiệu quả! – contactmatt
setInterval(function(a,b,c){
console.log(a + b +c);
}, 500, [1],[2],[3]);
//note the console will not print 6
// rather it will print 123 in every 500 ms
// because arguments are passed as array not as numbers
// tested in node.js ie 11 and chrome
Câu trả lời được giải thích tốt nhất. –
Vậy tại sao truyền đối số thành mảng? Chi tiết này thậm chí không liên quan đến câu hỏi. – Xufox
Một giải pháp khác bao gồm trong vượt qua chức năng của bạn như thế (nếu bạn có vars động): setInterval ('funca (' + x + ',' + y + ')', 500);
Bạn có thể sử dụng thư viện có tên là gạch dưới js. Nó cung cấp một wrapper đẹp trên phương thức bind và cũng là một cú pháp sạch hơn. Cho phép bạn thực thi hàm trong phạm vi được chỉ định.
_.bind (chức năng, phạm vi, đối số *)
setInterval(function,milliseconds,param1,param2,...)
parenthesizes Thêm chức năng ẩn danh sau dường như làm các trick:
function clock() {
n = 10;
while(--n) {
setInterval(function() {
console.log(n);
}(n), 1000);
}
}
Mã của bạn sẽ chỉ chạy hàm nhưng nó sẽ không áp dụng độ trễ cho nó, bạn có thể xóa các dòng xung quanh 'console.log (n)' và bạn sẽ có kết quả tương tự. –
Tôi biết chủ đề này là quá cũ nhưng đây là giải pháp của tôi về việc truyền các tham số trong hàm 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);
}
Cho đến nay câu trả lời thiết thực nhất là người do tvanfosson, tất cả tôi có thể làm là cung cấp cho bạn một phiên bản cập nhật với ES6:
setInterval(()=>{ funca(10,3); }, 500);
Bạn có nói rằng() => {} là cách mới của ES6 để thay thế hàm() {}? Hấp dẫn. Đầu tiên, tôi nghĩ rằng tên lửa đã được passe. Và, trừ khi cú pháp này có sử dụng phổ biến khác, nó chỉ rất, rất kỳ quặc. Tôi thấy chúng là "mũi tên béo". Tuy nhiên, kỳ quặc. Tôi đoán ai đó thích nó và đó là vấn đề của ý kiến. –
- 1. Javascript hàm setInterval với đối số
- 2. Truyền tham số đến một hàm mẫu trong javascript
- 3. Truyền mảng tới tham số hàm trong OpenCL
- 4. Truyền mảng như tham số hàm trong Lua?
- 5. Truyền tham số cho các hàm bản đồ trong CouchDb
- 6. Biết số tham số của hàm được truyền (erlang)
- 7. truyền hàm làm đối số trong hàm
- 8. Truyền mảng tham số so với tham số riêng lẻ cho một hàm trong PHP?
- 9. Truyền tham số tùy chọn bên trong hàm bao hàm cho hàm phụ
- 10. Truyền tham số trong Link_to
- 11. JavaScript: Truyền tham số đến hàm gọi lại
- 12. Truyền Lớp như tham số
- 13. Tham số truyền bằng initWithNibName:
- 14. Truyền tham số trong đường ray redirect_to
- 15. Truyền tham số qua server.execute?
- 16. Truyền ArrayList làm tham số
- 17. Python: chuyển hàm có tham số làm tham số
- 18. Làm thế nào để truyền mảng tới hàm sử dụng hàm func_get_args để lấy tham số
- 19. Truyền tham số cho BroadcastReceiver
- 20. Truyền tham số cho System.EventHandler bằng C#
- 21. Chuyển một hàm (có tham số) làm tham số?
- 22. Truyền biến số toàn cục sang hàm
- 23. Truyền số nguyên theo tham chiếu trong Python
- 24. Truyền đối số variadic trong một hàm đến một hàm khác trong D
- 25. Android: truyền tham số cho một tab
- 26. Python: Truyền tham số theo tên
- 27. Tương đương với hàm setTimeout và setInterval trong Tập lệnh #
- 28. Truyền tham số cho đối tượng XMLHttpRequest
- 29. Các generics Java truyền tham số
- 30. Array_map hàm trong php với tham số
điều gì cần cho tham số động? – rony36
@ rony36 - bạn có thể muốn có một chức năng tạo bộ đếm thời gian cho bạn. Vượt qua tham số cho hàm để giá trị của nó được ghi lại trong chức năng đóng và giữ lại khi hết thời gian. '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 nó cho nhiều hơn một tham số. Và, vui lòng, sử dụng các tên biến mô tả hơn. :) – tvanfosson
@tvanfosson - Làm cách nào để xóa khoảng thời gian này? – Yong