平時編寫js代碼對arguments接觸的可能不是很多,但是瞭解arguments卻是很有必要的。
例如,需要編寫一個函數求傳入的若干個數字(不能用數組顯示傳入)的和,
這時候就需要用到arguments了。
要實現這個函數我們先來了解下arguments:
具體可參考http://www.w3school.com.cn/js/pro_js_functions_arguments_object.asp
在Javascript中arguments是一個類似Array的存在,但它不能等同於Array。
arguments對象不能顯式的創建,它只有在函數開始時纔可用。
它可以像訪問數組那樣去訪問每一個子元素。.
PS:arguments[0],arguments[1],。。。。。。。。arguments[n];
Javascript並沒有重載函數的功能,但是通過Arguments對象能夠模擬重載。
Javascript的每個函數都會有一個Arguments對象實例arguments,它引用着函數的實參,它也有類似於數組的length屬性。
(1)、arguments.length 爲函數實參個數。
(2)、arguments.callee 引用函數自身。
1、我們可以借用arguments.length可以來查看實參和形參的個數是否一致:
function add(a, b) {
var realLen = arguments.length;
console.log("realLen:", arguments.length);
var len = add.length;
console.log("len:", add.length);
if (realLen == len) {
console.log('實參和形參個數一致');
} else {
console.log('實參和形參個數不一致');
}
};
add(1,2,3,6,8);
var sum = function(n) {
if(n == 1) {
return 1;
} else {
return n + arguments.callee(n-1);
}
}
console.log("sum =", sum(5));
好了現在讓我們來實現文章開頭提到的那個函數(求傳入的若干個數字(不能用數組顯示傳入)的和)。
1、借用arguments.length屬性來實現
function add() {
//console.log("length", arguments.length);
var len = arguments.length;
var sum = 0;
for (var i = 0; i < len; ++i) {
sum += arguments[i];
}
return sum;
};
add(1,2,3,6,8);
2、借用prototype屬性來實現:
function add() {
return Array.prototype.reduce.call(arguments, function(n1, n2) {
return n1 + n2;
});
};
add(1,2,3,6,8);