javascript - IIFE 的 this 是否总是指向全局对象?
问题描述
我在下面有一个代码片段。
var obj = {
name: "Mohit",
func: function(){
var self = this;
(function(){
console.log(this.name);
console.log(self.name)
})()
}
}
执行 obj.func() 后,我得到第一个 console.log 未定义,而第二个是 Mohit。
这是否意味着 IIFE 总是将 this 绑定到全局窗口对象?
如何定义 self 是发生在 obj 上的 IIFE 的绑定?
解决方案
您在没有明确引用的情况下调用的任何this
函数都将this
设置为全局对象,或者在“严格”模式下设置为undefined
(在您的示例中不是这种情况)。
如果你愿意,你可以明确地确保它this
是绑定的obj
:
var obj = {
name: "Mohit",
func: function(){
var self = this;
(function(){
console.log(this.name);
console.log(self.name)
}).call(this)
}
}
obj.func();
通过使用,您可以在被调用函数内部.call(this)
提供一个值。this
推荐阅读
- java - 如何通过 jdbc:mysql 连接到 siteground
- python - Pytorch Text AttributeError:“BucketIterator”对象没有属性
- vagrant - VAGRANT ERROR 命令:["hostonlyif", "create"]
- django - Django不会上传和保存文档
- python - 当您将变量设置为方法时,您将术语称为什么?
- bash - 如何在 Dockerfile 中启动 ssh-agent
- linux - 获取月份中同一天的日期
- http - DXL UTF 8 编码器
- image-processing - 通过相机进行颜色区分
- graphics - Adobe Illustrator 文件中缺少画板