2013-07-04 51 views
2
function f(message) 
{ 

    console.log(message,arguments); 

} 

f("H", "e", "l", "l", "o"); 

它表明:H + [ 「H」, 「E」, 「L」, 「L」, 「O」]試圖瞭解在JS的論點

問:

爲什麼消息只顯示H,而不是["H", "e", "l", "l", "o"]

+0

消息= H和參數是所有在函數 – dekdev

+1

中傳遞的內容爲什麼你想傳遞錯誤的參數個數? –

回答

4

你傳入5個函數的自變量:

function test(arg1,arg2,arg3){ 
    console.log(arg1);//=1 
    console.log(arg2);//=2 
    console.log(arg3);//=3 
    console.log(arguments);//[1,2,3,4,5] 
} 
test(1,2,3,4,5); 

的參數變量是包含了所有的函數的參數的特殊變量。

因爲你可以使用變量,你可以離開了ARG1的論點,ARG2,ARG3部分intirely:

function test(){ 
    console.log(arguments[0]);//=1 
    console.log(arguments[1]);//=2 
    console.log(arguments[2]);//=3 
    console.log(arguments);//[1,2,3,4,5] 
} 
test(1,2,3,4,5); 

一般人不這樣做,因爲它不清楚是什麼傳遞給函數。爲了更清楚地知道你的函數應該返回什麼以及你應該傳遞哪些變量,你可以使用JSDoc。許多IDE使用它來顯示自動完成/代碼協助時的方法的更多信息。

/** 
* Gets user By Id 
* @param {Number} id 
* @returns {User} 
*/ 
var getUserById=function(id){ 
    return u; 
} 
0

你的功能f只有一個參數,以及要傳遞5個獨立的值或參數因爲你只有一個參數來接收它則僅其具有「H」價值1st parameter僅接受一個。

1

消息是要傳遞給函數的第一個參數,在這種情況下,"H"arguments它是一個類似數組的對象,持有所有的參數,你在通過

一些信息:

1

這裏發生了什麼是你在這裏傳遞5個參數到f中。由於函數中只有一個參數,因此只有第一個參數分配給message

然而,如您所知,其他四個仍然在arguments僞陣列中。

0

你的功能f接受只有一個參數即message。但在函數調用過程中,您傳遞了5個參數,即"H", "e", "l", "l", "o"。如果你想整個的這是在信息可用,那麼無論是通過使用以下methos中的任何一個:

  1. 在單串f("Hello")
  2. 級聯串f("H" + "e" + "l" + "l" + "o")
  3. 或將它作爲一個陣列f(["H", "e", "l", "l", "o"])

arguments變量的JavaScript即每當你將參數傳遞給它被分配給該函數具有變量的函數的內部功能處理機構在其簽名中定義,但這些變量的數組列表也保存在名爲arguments的函數變量中。