arguments
arguments对象和Function是分不开的。
因为arguments这个对象不能显式创建。
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 */
|
任何值得做的事就值得把它做好。- Whatever is worth doing is worth doing well.