js之arguments詳解

平時編寫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);


2、我們可以借用arguments.callee來讓匿名函數實現遞歸:


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);



發佈了852 篇原創文章 · 獲贊 1848 · 訪問量 137萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章