JavaScript 函數對參數的值(arguments)沒有進行任何的檢查。不會關注有多少個參數被傳遞,不關注傳遞的參數的數據類型。javascript
函數顯式參數與隱藏參數(arguments)java
函數顯式參數在函數定義時列出。數組
函數隱藏參數(arguments)在函數調用時傳遞給函數真正的值。函數
默認參數ui
若是函數在調用時缺乏參數,參數會默認設置爲: undefinedspa
有時這是能夠接受的,可是建議最好爲參數設置一個默認值:code
function a (x,y){對象
if (y===undefined){ip
y=0;內存
}
return x+y;
}
或者直接:
function a (x,y){
y=y||0;
return x+y;
}
若是函數調用時設置了過多的參數,參數將沒法被引用,由於沒法找到對應的參數名。 只能使用 arguments 對象來調用。
JavaScript 函數有個內置的對象 arguments 對象. argument 對象包含了函數調用的參數數組。
若是函數修改參數的值,將不會修改參數的初始值(在函數外定義)。 總結:JavaScript函數傳值只是將參數的值傳入函數,函數會另外配置內存保存參數值,因此並不會改變原參數的值。
var x = 1; // 經過值傳遞參數
function a(x) {
x++; //修改參數x的值,將不會修改在函數外定義的變量x
console.log(x);
}
a(x); // 2
console.log(x); // 1
在JavaScript中,能夠引用對象的值。所以咱們在函數內部修改對象的屬性就會修改其初始的值。 修改對象屬性可做用於函數外部(全局變量)。
var obj = {x:1}; // 經過對象傳遞參數
function a(obj) {
obj.x++; //修改參數對象obj.x的值,函數外定義的obj也將會被修改
console.log(obj.x);
}
a(obj); // 2
console.log(obj.x); // 2