2010-05-18 15 views
205
函數參數

我想打電話使用數組作爲參數的函數:傳遞一個數組在JavaScript

const x = ['p0', 'p1', 'p2']; 
call_me(x[0], x[1], x[2]); // I don't like it 

function call_me (param0, param1, param2) { 
    // ... 
} 

是否有合格的x內容到call_me()的更好的辦法?

回答

294
const args = ['p0', 'p1', 'p2']; 
call_me.apply(this, args); 

查看MDN文檔Function.prototype.apply()


如果環境支持的ECMAScript 6,你可以使用一個spread argument代替:

call_me(...args); 
+4

作爲一個附註,如果有人想要傳遞一個關聯數組(名爲keys),那麼使用一個對象。來自PHP(並總是通過谷歌引導到這個線程),這讓我花了一段時間才弄清楚。然後您可以將整個對象作爲參數傳遞。 http://www.w3schools.com/js/js_objects.asp – timhc22 2014-05-29 08:56:49

+0

感謝您指出'傳播'的論點!不知道。 – 2017-11-12 21:44:51

66

你爲什麼不通過整個陣列和處理它作爲函數內部需要的?

var x = [ 'p0', 'p1', 'p2' ]; 
call_me(x); 

function call_me(params) { 
    for (i=0; i<params.length; i++) { 
    alert(params[i]) 
    } 
} 
+31

這是因爲我無法修改call_me()。它是在其他一些庫中定義的,不可能混淆API。 – Robert 2010-05-18 11:54:33

+43

+1,因爲即使它不回答原始問題,也可能是查看此頁面的100K +人正在尋找的內容。 – Ishikawa 2015-03-05 00:21:33

+0

有人可以解釋「call_me(x)」行正在做什麼?它似乎是一個沒有函數關鍵字的函數名稱?它到底在做什麼? – swam 2015-11-20 06:19:23

40

假設call_me是一個全局函數,所以你不要指望它被設置。

var x = ['p0', 'p1', 'p2']; 
call_me.apply(null, x); 
5

由於@KaptajnKold已經回答

var x = [ 'p0', 'p1', 'p2' ]; 
call_me.apply(this, x); 

而你並不需要爲call_me功能各項參數要麼定義。 你可以使用arguments

function call_me() { 
    // arguments is a array consisting of params. 
    // arguments[0] == 'p0', 
    // arguments[1] == 'p1', 
    // arguments[2] == 'p2' 
} 
+2

這是一種很糟糕的做法......如果你看看這個功能,你將無法看到該功能需要什麼,並且每個參數都是可選的。 – Robin 2016-10-31 08:06:52

4

注意這個

function FollowMouse() { 
    for(var i=0; i< arguments.length; i++) { 
     arguments[i].style.top = event.clientY+"px"; 
     arguments[i].style.left = event.clientX+"px"; 
    } 

}; 

// -------------------------- -

html頁面

<body onmousemove="FollowMouse(d1,d2,d3)"> 

<p><div id="d1" style="position: absolute;">Follow1</div></p> 
<div id="d2" style="position: absolute;"><p>Follow2</p></div> 
<div id="d3" style="position: absolute;"><p>Follow3</p></div> 


</body> 

可以調用任何參數數量

<body onmousemove="FollowMouse(d1,d2)"> 

<body onmousemove="FollowMouse(d1)"> 
+0

這顯然是答案的一部分。在調用之後重新獲得數組肯定需要「參數」。謝謝! – FlorianB 2016-06-25 14:30:51

25

有一個新的spread operator...這正是這麼做的。

call_me(...x) 

它是標準化的ES6,但不支持IE。

-7

1-可以加入陣列成串
2-傳遞起作用
3-呼叫分裂

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
function myFunction(name) 
{ 
    var nameArray = name.split(','); 
. 
. 
. 
} 

呼叫的方法:

myFunction(fruits.join(',')); 

甚至

myFunction("orange,Apple,fruits");