2017-05-22 127 views
0

我工作的一個PHP應用程序,其中我有以下的現有代碼:如何使用單參數調用javascript函數可以通過變量參數調用函數?

<ul> 
    <li><a href="#" id="BillingP" onClick="change_main_Selection(this);">Paper</a></li> 
    <li><a href="#" id="BillingE" onClick="change_main_Selection(this);">Electronic</a></li> 
    <li><a href="#" id="BillingE" onClick="change_main_Selection(this,'CLHReports');">Clearing House Reports</a></li> 
    <li><a href="#" id="BillingCP" onClick="change_main_Selection(this);">Capitation</a></li> 
</ul> 

正如你所看到的功能change_main_Selection(本)被調用,上標籤時用戶點擊。我試圖找到change_main_Selection()的定義,發現以下幾點:

function change_main_Selection(main_tab, sub_tab, redirect_url, flgNc, onload){ 
    var main_tab_obj = main_tab; 
    var sub_tab_obj = sub_tab; 
} 

我的困惑是,當調用change_main_Selection(),只需要一個參數。但它怎麼能用多個參數調用change_main_Selection()函數。

+0

未通過參數認爲是'undefined'。閱讀語言文檔。 – maximkou

+0

請注意,您也可以調用帶有* more *參數的函數,而不是顯式定義它。 – nnnnnn

回答

2

JavaScript函數不會對參數值(參數)執行任何檢查。

如果一個函數被調用,缺少參數(小於聲明),缺少的值設置爲:undefined

有時候,這是可以接受的,但有時它是更好的默認值分配給參數:

function myFunction(x, y) { 
    y = y || 'defaultValue'; // overwrites falsey values (0, null, false) 

    // better approach 
    if (typeof y === 'undefined') { y = 'defaultValue'; } 
} 

隨着ES6,你可以提供一個C++風格的默認值默認值如下:

function myFunction(x, y='defaultValue'){} 
+2

請注意,使用'||'將覆蓋實際的*定義*值,如果它們是假的。 – nnnnnn

+0

類似於'if(typeof y ==='undefined'){y ='defaultValue'; }'會更好 – George

+0

是的,真正的傢伙,這涵蓋了更好的範圍 – KAD

0

您可以ACCES s到通過在w3schools解釋自己的函數中arguments可變參數,這意味着沒有必要在你的函數顯式聲明任何參數:

x = findMax(1, 123, 500, 115, 44, 88); 
 
console.info(x); 
 
function findMax() { 
 
    var i; 
 
    var max = -Infinity; 
 
    for (i = 0; i < arguments.length; i++) { 
 
    if (arguments[i] > max) { 
 
     max = arguments[i]; 
 
    } 
 
    } 
 
    return max; 
 
}

,您可以通過arguments可變

訪問它們
1

Javascript函數被稱爲variadic函數。您可以通過less paramsmore params。當您傳遞較少的參數時,額外的參數設置爲undefined。如果你傳遞更多,你可以在一個特殊的數組中看到它們,如arguments

當您傳遞更多參數時,請參閱下面的示例。

function sum() { 
var s = 0; 
for(var i=0;i<arguments.length;i++){ 
     s+= arguments[i]; 
} 
return s; 
} 

var ans = sum(1,2,3); 
console.log(ans);//6 
相關問題