JS中的隐含参数
介绍JS的隐含参数callee、callee、arguments的含义,并通过实验证明。
caller
caller是函数的属性,代表调用当前函数的函数的引用。如果在全局作用域中调用,它的值为null。
1 | function func() { |
看到输出结果:
第一个为函数的字符串表示(chrome的控制台似乎是输出函数的字符串表示)
第二个为true,表明caller是等于它的调用函数
第三个为this is not caller,表明最外层调用函数时不存在caller
callee
callee是arguments的属性,代表当前正在执行的函数
1 | function func() { |
从输出结果可以看到无论调用在不在最外层arguments的callee属性都存在,且都等价于该函数本身
arguments
arguments是一个类数组对象不是一个数组实例;arguments和命名参数共用同一块内存空间1
2
3
4
5
6
7
8
9
10function argumentsTest(arg1,arg2){
console.log("arguments instanceof Array?",arguments instanceof Array);
console.log("arguments instanceof Object?",arguments instanceof Object);
console.log("arguments[0] === arg1?", arg1 === arguments[0]);
}
argumentsTest(1,2,3,4,5);
//输出结果为:
//arguments instanceof Array? false
//arguments instanceof Object? true
//arguments[0] === arg1? true
显然arguments是个类数组,并且各个位置的值等价于同名变量。