JS 关于 this 指向的疑惑

2020-10-23 16:23:44 +08:00
 chenpingan

//代码 var name = '行星飞行'; let obj = { name: '听风是风', fn: function () { console.log(this.name); } };

function fn1(param) { param(); }; fn1(obj.fn);

这个例子中我们将 obj.fn 也就是一个函数传递进 fn1 中执行,这里只是单纯传递了一个函数而已,this 并没有跟函数绑在一起,所以 this 丢失这里指向了 window 。

上述是一篇文章中讲述的,我有点没搞清楚“this 并没有跟函数绑在一起,所以 this 丢失这里指向了 window”这句话到底表述了什么意思...

1470 次点击
所在节点    JavaScript
3 条回复
Exceptionluo
2020-10-23 17:35:19 +08:00
var name = "行星飞行";
let obj = {
name: "听风是风",
fn: function () {
console.log(this.name);
//哪个对象调用该方法,this 即指向该对象
},
};

function fn1(fn) {
/*
这里的 fn 只是个方法,同 function () {
console.log(this.name);
}
该方法已经和 obj 对象没有关系了,所以最终的 this 就指向了兜底对象 window 对象,里面的 this 就是 window

虽然 fn 在 fun1 里执行,但是 fn 不属于 fn1,这里只是借用的关系
*/
fn();
}
fn1(obj.fn);
chenpingan
2020-10-23 17:52:53 +08:00
@Exceptionluo 我有点理解了,谢谢你
rzWack
2020-11-05 10:43:04 +08:00
总结楼上:this 指向最后一次调用的对象。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX