在 JS 中,立即执行匿名函数表达式是常见的一种模块化组织代码的方式,常常用于避免全局作用域的变量污染和函数命名冲突。在这种模式下,匿名函数会在定义时立刻执行,通常会使用到闭包。那么,在这种模式下,this 指代的到底是什么呢?
在立即执行匿名函数表达式中的 this,实际上是指向全局对象(在浏览器中为 window,在 Node.js 中为 global)。这与函数传入的参数、使用的变量以及函数本身的作用域无关。下面是一些例子,以便更好地理解:
(function() {
console.log(this); // 指向全局对象
})();
(function() {
'use strict';
console.log(this); // 指向 undefined
})();
var obj = {
myMethod: function() {
console.log(this); // 指向全局对象
}
};
(function() {
obj.myMethod(); // 指向全局对象
})();
var obj = {
myMethod: function() {
(function() {
console.log(this) // 指向全局对象
})();
}
};
obj.myMethod();
var obj = {
myMethod: function() {
(function() {
'use strict';
console.log(this) // 指向 undefined
})();
}
};
obj.myMethod();
在上述例子中,this 都指向全局对象(window 或 global)。
需要注意的是,在使用 this 时需要注意其指向,因为不同的上下文中 this 的指向是不一样的。如果是想绑定特定的上下文对象,可以使用 call、apply、bind 等函数来指定 this 指向。
总之,在立即执行匿名函数表达式中,this 指代的是全局对象,它不受函数内部上下文的影响。