下面是深入理解JS函数参数(arguments)的使用攻略。
1. 什么是JS函数参数(arguments)?
在JS函数中,我们可以使用参数(argument)来接收外部传入的数据,这些参数被封装在一个类数组对象arguments中。arguments是代表传入函数的参数的对象,可以通过它访问函数的形参和实参。
2. arguments对象方法
arguments对象是一个类数组对象,提供了许多方法如下:
2.1 arguments.length
arguments对象的length属性即为传入参数的个数(不是函数形参的个数),我们可以利用arguments.length对函数进行重载,不同的参数个数可执行不同的代码块。
function fn(){
if(arguments.length === 0){
console.log("该函数不需要参数");
} else if(arguments.length === 1){
console.log("该函数需要一个参数");
} else {
console.log("该函数需要两个或以上的参数");
}
}
fn(); // 该函数不需要参数
fn("Hello"); // 该函数需要一个参数
fn("Hello", "World"); // 该函数需要两个或以上的参数
2.2 arguments[n]
arguments对象还可以通过索引访问每一个实参。通过arguments[n]可以访问函数的第n个参数(n从0开始),如果该参数未传入,则其值为undefined。
function fn(p1, p2){
console.log(arguments[0]); // 输出1
console.log(arguments[1]); // 输出2
console.log(arguments[2]); // 输出undefined
}
fn(1, 2);
2.3 arguments.callee()
利用arguments.callee,函数内部可以递归调用自身,即我们可以在没有函数名的情况下调用自身。
var countDown = function(num){
if(num < 0){
return;
}
console.log(num);
num--;
arguments.callee(num);
};
countDown(5); // 5 4 3 2 1 0
2.4 arguments.caller
arguments.caller可以用于获取当前函数的调用栈。
function a(){
console.log("a函数的调用者是:" + arguments.callee.caller.name);
}
function b(){
a();
}
b();
3. arguments与形参的区别
我们使用函数时有形参,在传递参数时直接将参数传入形参中,而arguments对象则是存储尚未通过形参赋值的参数的对象,它们在JS中存在本质上的区别。
4. 示例
- 计算任意个数的和。
function sum(){
var total = 0;
for(var i = 0;i < arguments.length;i++){
if(typeof arguments[i] == "number"){
total += arguments[i];
}
}
return total;
}
console.log(sum(1,2,3,4,5)); // 15
- 求任意个数的参数中最小值。
function min(){
var result = arguments[0];
for(var i = 1;i < arguments.length;i++){
if(arguments[i]< result){
result = arguments[i];
}
}
return result;
}
console.log(min(-1, 0, 1, 2, 3, 4)); // -1
以上就是深入理解JS函数的参数(arguments)的使用的攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解JS函数的参数(arguments)的使用 - Python技术站