天天看點

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

繼續閱讀