在下文中,第二个和第三个控制台输出似乎相矛盾:
function test() {
console.log(arguments); // -> ["my", "arguments"]
console.dir(this); // -> test function with arguments property set to null
console.log(this.arguments); // -> ["my", "arguments"]
}
test.call(test, 'my', 'arguments');
根据我的评论,检查arguments
上的this
属性会显示null
,同时记录this.arguments
会明确显示["my", "arguments"]
。
以这种方式调用函数时,this
究竟是什么?我没想到this.arguments
包含调用参数!
答案 0 :(得分:5)
arguments
作为Function
的属性无法再使用。
因此我根本不会尝试使用this.arguments
,而是使用本地函数变量arguments
。很明显,创建arguments
也有一些神奇之处。
答案 1 :(得分:5)
以这种方式调用函数时到底是什么?我没想到this.arguments包含调用参数!
this
keyword确实指的是test
函数 - 这就是你call
ed的含义。您可以通过记录this === test
。
arguments
属性是什么?在函数调用期间设置为实际very deprecated one的arguments
object(之后删除,这似乎是console.dir
未正确捕获它的原因)。不要使用它,也不要关心它: - )
function test() {
console.assert(this === test);
console.assert(this.arguments === arguments);
console.log(Object.getOwnPropertyDescriptor(this, "arguments"));
}
test.call(test, 'my', 'arguments');
// result (in Opera):
Object {
configurable: false,
enumerable: false,
value: Arguments {
0: "my",
1: "arguments",
callee: Function {…},
length: 2
},
writable: false
}