2013-12-08 27 views
6

Tôi bị chặn về cách truyền đúng tham số cho hàm gọi lại mà không cần gọi hàm đó ngay lập tức.Javascript: cách chuyển các tham số đến hàm gọi lại

Ví dụ, điều này sẽ làm việc như mong đợi:

var callBack = function() { ... } 
window.setTimeout(callBack, 1000); 

Nhưng điều này sẽ vô tình gọi callBack:

var callBack = function(param1, param2) { ... } 
window.setTimeout(callBack('foo','bar'), 1000); 

Trả lời

7

Bạn có thể gọi nó như sau,

var callBack = function(param1, param2) { ... } 
window.setTimeout(function(){callBack('foo','bar');}, 1000); 
+0

Không cần một chức năng ẩn danh ở đây - nó chỉ làm xáo trộn mã. Hàm settimeout hỗ trợ truyền các đối số cho hàm gọi lại của nó - vậy tại sao không sử dụng nó? – Lix

+1

@Lix cả hai cách đều có thể chấp nhận được, tuy nhiên chuyển các đối số đến cuộc gọi lại mà tôi nghĩ không được hỗ trợ trong ví dụ. – melc

+0

@Lix Tuy nhiên tôi rất vui vì câu trả lời này đã được đăng bởi vì nó cho thấy một giải pháp chung chung hơn hoạt động khi hàm lấy hàm gọi lại cũng không lấy đối số cho cb. Bây giờ chỉ có 'bind()' bị thiếu (được đề cập, không nhiều hơn) :) –

8

Cách để truyền tham số là sau tham số thời gian như được nêu trong the documentation of settimeout().

var timer = window.setTimeout(func, delay, [ param1, param2, ... ] 

Đối số đầu tiên là gọi lại thực tế, thứ hai là thời gian trong mili giây và cuối cùng (không bắt buộc) đối số là một mảng các tham số để vượt qua để gọi lại.

Vì vậy, ví dụ bạn nó sẽ là một cái gì đó như:

window.setTimeout(callBack, 1000, [ "foo", "bar" ]); 

Tiêu đề của câu hỏi của bạn là hơi sai lầm như là phương pháp sử dụng để truyền tham số cho một hàm callback khác trong việc thực hiện các mã số đó là sử dụng nó. Như bạn có thể tưởng tượng, đối tượng hàm thực tế và các tham số của nó không nhất thiết cần phải được truyền lại với nhau khi thực hiện các hàm được hoãn lại sau; Chỉ sau đó làm các thông số cần phải tiếp xúc với các cuộc gọi lại.


Để có giải thích chung hơn về cách chuyển đối số cho đối tượng gọi lại, bạn có thể xem bài đăng này: JavaScript: Passing parameters to a callback function.

Các vấn đề liên quan