完全理解 arguments
什么是 arguments
它是JS的一个内置对象,常被人们所忽略,但实际上确很重要,
JS不像JAVA是显示传递参数,JS传的是形参,可以传也可以不传,若方法里没有写参数却传入了参数,该如何拿到参数呢,答案就是arguments了,在一些插件里通常这样使用。
每一个函数都有一个arguments,它包含了函数所要调用的参数,通常我们把它当作数组,通过下标获取参数。然而它却不是数组
我们打印一下arguments看看到底是什么?
虽然arguments不是数组但是我们可以将它转换成数组
[].slice.call(arguments);
参数与 arguments 的关系
先看代码:
function a1(x) {
x = 2;
console.log(x, arguments[0]);
}
a1(); // 2 undefined
function a2(x) {
arguments[0] = 2;
console.log(x, arguments[0]);
}
a2(); // undefined 2
我们看到,如果缺省参数,arguments和参数是完全隔离开的。
如果传入参数:
function a3(x) {
x = 2;
console.log(x, arguments[0]);
}
a3(1); // 2 2
function a4(x) {
arguments[0] = 2;
console.log(x, arguments[0]);
}
a4(1); // 2 2
我们看到这里arguments和参数是双向绑定的