首页
Javascript
Html
Css
Node.js
Electron
移动开发
工具类
服务端
浏览器相关
前端收藏
其他
关于

javascript Arguments对象之length、callee属性

2013年09月30日 发布 阅读(341) 作者:懒炖

arguments是调用对象的一个属性,它与形参及局部变量是一样的,它实际上是调用了一个Arguments对象,Arguments对象与数组相似,但它又不是数组,因为它不具备数组的一些常用方法,如push,sort,shift等等。Arguments对象有两个属性:

1、length属性,我们可以利用Arguments对象的length属性来获取实际传递进的参数有几个。

  1. function a(x, y, z) {
  2. //arguments.callee指向函数a(),arguments.callee.length==a.length;
  3. alert(arguments.callee.length);
  4. //输出5
  5. alert(arguments.length);
  6. if (arguments.callee.length != arguments.length) {
  7. //判断形参与实参个数是否相等,不相等则不执行
  8. return false;
  9. }
  10. alert("执行");
  11. };
  12. a(1,2,3,4,5);

2、callee属性,Arguments对象的callee属性,指向当前调用的函数,可以利用它来进行函数自身的重载。在闭包中应用的也比较广泛。

  1. var i = 0;
  2. function b(num) {
  3. if (num < 10) {
  4. num++;
  5. i++;
  6. //如果有参数,callee也要把参数带上;
  7. arguments.callee(num);
  8. } else {
  9. //输出2次
  10. alert("调用了"+i+"次callee!");
  11. }
  12. }
  13. b(8);

Arguments.callee在闭包中的应用,它提供了一种递归调调用的功能。

  1. //用arguments.callee计算10的阶乘,例如: 1×2×3×4×5×6×7....
  2. function c(x) {
  3. return x > 1 ? x * arguments.callee(x - 1) : 1
  4. } (10);
  5. //输出6
  6. alert(c(3));
  7. //输出3628800
  8. alert(c(10));
版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处

评论

  •