2009-12-17 49 views
20

Tôi muốn làm những gì setTimout thực hiện, theo cách thủ công, không có thời gian chờ.Javascript: Chức năng gọi, truyền mảng đối số, tương tự như chức năng của setTimout()

setTimeout(function,0,args); 

Chỉ cần gọi hàm và chuyển cho nó một mảng đối số, không biết hoặc quan tâm có bao nhiêu đối số.

Về cơ bản tôi muốn proxy cuộc gọi chức năng thông qua một chức năng khác.

Tôi rất xấu với thuật ngữ, xin lỗi.

+1

Xem thêm: http://stackoverflow.com/questions/1881905/call-function-with-multiple-arguments – CMS

+0

@ Michał Perłakowski không chắc chắn đây là bản sao (đã được trả lời) bởi liên kết bạn đã thêm từ đó đã được hỏi và trả lời đầu tiên? Có lẽ bạn đang nói "xóa câu hỏi ở đây"? – somedev

+0

@somedev Câu hỏi khác có câu trả lời hay hơn, xem [Tôi có nên gắn cờ câu hỏi là trùng lặp nếu câu hỏi đã nhận được câu trả lời hay hơn không?] (Https://meta.stackoverflow.com/q/251938/3853934) –

Trả lời

43
function f(a, b, c) { return a + b + c; } 
alert(f.apply(f, ['hello', ' ', 'world'])); 
0

Có vẻ như bạn muốn một hàm có đối số biến làm đối số. Cách tốt nhất để làm điều này là một mảng hoặc đối tượng rõ ràng nói chung.

myFunction(callbackFunction, count, arrayOfOptions); 

myFunction(callbackFunction, count, objectOfOptions); 
0

Hãy xem biến số arguments của javascript. Đây là một mảng của tất cả các đối số được truyền vào hàm.

Vì vậy, bạn có thể tạo ra chức năng cốt lõi của bạn như thế này:

f = function() { 
    for (arg in arguments) { 
     // do stuff 
    } 
} 

Sau đó, tạo một chức năng mới với các đối số phải:

f2 = function() { 
    return f(arg1, arg2, arg3 /* etc. */); 
} 

Và vượt qua chức năng này để setTimeout:

setTimeout(f2, 0); 
7

Trong ES6:

function myFunc(a, b, c){ 
    console.log(a, b, c); 
} 

var args = [1, 2, 3]; 
myFunc(...args); 
+0

cảm ơn vì điều này! Tôi <3 ES6. – hartz89

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