今天在群里面,蚂蚁问了一些关于this和arguments的问题,把我所认识的arguments总结一下。 当函数内的执行域生成时,arguments对象就被创建了。 arguments对象由所在函数的CreateArgumentsObject方法创建。 这个方法生成了arguments对象,主要是一个list,包含了函数的实参。与函数的形参没有关系,使得不定参数个数的函数成为可能。 例如: function sum(){ var result=0; for(var i=0;i<arguments.length;i++){ result+=arguments[i]; } return result; } console.log(sum(1,2,3,4)); 结果是10 上文中用了arguments的一个属性length,这个属性的值等于实参的个数。 除此之外,arguments还有个重要的属性,callee arguments.callee指向函数本身 听起来似乎不好理解。 function ex(){ console.log(arguments.callee); } ex(); 结果: function ex(){ console.log(arguments.callee); } 说arguments.callee指向了函数本身。。 这一点很有用,特别在匿名函数的递归中。 var s=function(i){ if(i==1){ return 1; } return i*arguments.callee(i-1); } console.log(s(3)); 结果:6 arguments是一个对象,虽然它像一个数组一样,有length属性,也用数字做下标来表达成员。 有些人将这类的对象,称之为类数组。 function a(){ console.log(arguments instanceof Array); console.log(arguments instanceof Object); ...Read More