arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用;
类型: 百度解释为伪数组;;;;;;;;;;;;;; arguments 对象不是一个真正的数组,它类似于数组,没有数组所特有的属性和方法,除了length。例如没有pop 方法。不过可以将其转换为数组;
function test() {
console.log(arguments)
}
test("name","age","backi");
输出结果: ["name", "age", "backi", callee: ƒ, Symbol(Symbol.iterator): ƒ]
可以正常转为数组:
Array.prototype.slice.call(arguments);
还有一个更简短的写法:
[ ].slice.call(arguments);
属性:
arguments.callee 指向当前指向的函数
arguments.caller 指向调用当前函数的函数,但是此已经不存在了,在非严格模式下可以用function.caller。
arguments.length 指向传递给当前函数的参数数量(实参)
arguments.callee.length 指向当前函数的形参数量(形参)
以下转载自网络----
应用场景:当调用一个函数时候,这个函数的参数数量比它显示声明的参数数量多的时候。
例如:1 检查参数的个数 2模拟函数重载
严格模式
1 function.caller,function.arguments 报错
2 arguments.callee 报错
3 arguments 不再追踪参数的变化
function f(a) {
a = 2;
return [a, arguments[0]];
}
f(1); // 正常模式为[2,2]
function f(a) {
"use strict";
a = 2;
return [a, arguments[0]];
}
f(1); // 严格模式为[2,1]
作者:天外来人
链接:https://www.jianshu.com/p/456a3da7f972
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。