1. var length = 10;
2. function fn() {
3. console.log(this.length);
4. }
5. var obj = {
6. length:5,
7. method: function(fn){
8. fn();
9. arguments[0]();
10. }
11. }
12. obj.method(fn,3)
解释:
先说运行结果 : 10 , 2
解析:
两次打印的结果, 其实fn这个函数
关键点, 就在于, 我们要搞清楚, 每次执行时的this到底是谁?
第一次的结果比较好辨认, fn函数尽管经过了传递,
但是在第 8 行代码当中, 函数是直接调用, this显然指向window对象
那么打印出来的window.length, 肯定就是10了
第二次的结果, 执行函数时, 写法有所不同
arguments首先是个对象
第9行, arguments[0], 其实等价于 arguments.0
在这里你把0看做一个属性名称
就像平时访问对象属性那样obj[“age”]
因此就不难理解 arguments.0();
那么this当然就会指向arguments
所以就打印了arguments.length , 结果为2