JavaScript-自测题10

arguments

  1. arguments对象和Function是分不开的。

  2. 因为arguments这个对象不能显式创建。

  3. arguments对象只有函数开始时才可用。

arguments0的意思,和arguments.0()的意思差不多(当然这么写是不允许的),你更可以这么理解:

1
2
3
4
5
6
7
arguments = {
0: fn, //也就是 functon() {alert(this.length)}
1: 第二个参数, //没有
2: 第三个参数, //没有
...,
length: 1 //只有一个参数
}
  • 例题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var length = 10;

function fn(){
console.log(this.length);
}

var obj = {
length:5,
method:function(fn){
fn();
arguments[0]();
}
}

obj.method(fn,1);

/*
第一个 fn this指向window 输出10
第二个 arguments[0]() 可以理解为arguments.0() [只是方便理解] ,
即argument对象调用fn函数,所以this指向arguments对象
arguments = {
0:fn, //function fn(){console.log(this.length);}
1:第二个参数 1,
length:2
}
*/
  • 延伸
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var len = 10;
var obj1 = {
len:6,
method:function(){
console.log(this.len);
}
};
var obj2 = {
len:5,
method:function(fn){
fn();
arguments[0]();
}
};

obj2.method(obj1.method,obj2.method); // 10 undefined
/*
第一个 fn this指向window 输出10
第二个 arguments[0]() this指向arguments
arguments = {
0:obj1.method, //function(){console.log(this.len);}
1:obj2.method,
length:2
}
arguments没有len属性,所以为undefined
*/