现在网站开发和软件开发,贵州省城乡建设厅网站首页,360优化大师官方网站,iis怎么使用来建设一个网站arguments并不是一个真正的数组#xff0c;而是一个“类似数组#xff08;array-like#xff09;”的对象#xff1b; 就像下面的这段输出#xff0c;就是典型的类数组对象#xff1a; [12, 23, callee: ƒ, Symbol(Symbol.iterator): ƒ] 一、类数组 VS 数组 相同点而是一个“类似数组array-like”的对象 就像下面的这段输出就是典型的类数组对象 [12, 23, callee: ƒ, Symbol(Symbol.iterator): ƒ] 一、类数组 VS 数组 相同点 都可用下标访问每个元素都有length属性不同点 数组对象的类型是Array类数组对象的类型是Object类数组对象不能直接调用数组API数组遍历可以用for in和for循环类数组只能用for循环遍历 function calc(){console.log(arguments); // [sky, moon, callee: ƒ, Symbol(Symbol.iterator): ƒ]console.log(arguments[0]); // skyconsole.log(arguments.length); // 2// arguments.pop(); // 报错arguments.pop is not a function
}calc(sky, moon); 类数组对象转为数组对象方法 Array.prototype.slice.call ( arguments ); function calc(){var newArr Array.prototype.slice.call(arguments);newArr.pop(); console.log(newArr); // [sky]
}calc(sky, moon); 二、类数组的用法 1、实现重载(overload)当函数的参数个数不明确时函数体根据参数的不同进行相应处理 比如我们要实现一个参数时做乘法运算二个参数时做加法运算 看下面代码我们可以这样实现 // 实现重载(overload)
function calc(){//传1个参数求平方if(arguments.length 1){return arguments[0] * arguments[0]; }//传2个参数求和else if(arguments.length 2){return arguments[0] arguments[1];}
}
console.log(calc(5));//25
console.log(calc(12,23));//35 2、实现递归在函数内部反复的调用函数本身 首先我们用最原始的方法实现数字的叠加 function calc(num){if(num 0){return 0;}else{return num calc(num - 1);}
}console.log(calc(3)); // 6 然后我们用类数组来实现同样的功能 arguments.callee返回当前函数本身 function calc(num){if(num 0){return 0;}else{return num arguments.callee(num - 1);}
}
console.log(calc(3)); // 6 下面举个栗子来说明这两种调用的一点小区别 如果写成 return num calc(num - 1) 会报错原因很简单当执行calc null 后calc已经不是一个函数 但是写成 return num arguments.callee(num - 1) 不会报错因为arguments.callee指的是“当前函数”并不是“calc” function calc(num){console.log(arguments);if(num 0){return 0;}else{return num arguments.callee(num - 1);// return num calc(num - 1); // 报错 Uncaught TypeError: calc is not a function}
}
var result calc;
calc null;
console.log(result(3)); 注意 arguments.callee的用法在严格模式下是不允许的 Uncaught TypeError: caller, callee, and arguments properties may not be accessed on strict mode functions or the arguments objects for calls to them use strict;
function calc(num){if(num 0){return 0;}else{return num arguments.callee(num - 1);}
}
console.log(calc(3)); 转载于:https://www.cnblogs.com/minigrasshopper/p/8058679.html