var len = 5;
var fn1 = function () {
console.log(this.len);
};
var main = {
method: function (fn) {
fn();
arguments[0]();
},
len : 10
};
main.method(fn1);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这哪是作用域问题呀,这是
this指向的问题。因为
fn的调用是fn()所以里面的this是window,所以输出是winodw.len是5直接执行fn1的结果是5 很显然这个函数里面的this指向的是window
关于 this 的指向问题,前
fn()是直接运行的函数,内部 this 应该指向 window。让我疑惑的是
后来想明白了,
arguments是一个对象,且arguments[0] = fn,故执行的时候,this 指向arguments,但arguments的 len 为underfined。fn() 弹出5, 没有调用者,属于直接执行
arguments[0]() 弹出 undefined,调用者为 arguments,弹出 arguments.len = undefined
联合他人的回复,我贴一个地址,供参考:
http://www.ruanyifeng.com/blo...
如果需要10,那么应该这么写:
很多框架或者插件都应该能看到这种写法。
那么写和直接执行没啥区别。