这在 JavaScript 中与自我之间的区别
2022-08-30 02:33:53
每个人都知道在javascript中,但也有在野外遇到的实例,例如这里this
self
那么,在 JavaScript 中 和 之间有什么区别呢?this
self
每个人都知道在javascript中,但也有在野外遇到的实例,例如这里this
self
那么,在 JavaScript 中 和 之间有什么区别呢?this
self
除非在其他地方设置,否则 的值是因为 JavaScript 允许您访问 的任何属性,而不是 。因此,真的是window.self
,这与此
不同。self
window
x
window
x
window.x
self
window.self === window; // true
如果使用的函数在全局范围内执行且未处于严格模式,则默认为 ,因此this
window
function foo() {
console.log(
window.self === window, // is self window?
window.self === this, // is self this?
this === window // is this window?
);
}
foo(); // true true true
如果在不同的上下文中使用函数,将引用该上下文,但仍将是 。this
self
window
// invoke foo with context {}
foo.call({}); // true false false
您可以在此处找到在 W3C 2006 窗口对象的工作草稿中定义的窗口对象。window.self
稍微补充一下,因为人们可能会在服务工作者的上下文中遇到这种情况,在这种情况下,这意味着略有不同的东西。
您可能会在服务工作线程模块中看到以下内容:
self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Install');
});
这里 self 指的是 WorkerGlobalScope,这是设置事件侦听器的标准方法。
来自 Mozilla 文档:
通过使用 self,您可以引用全局范围,这种方式不仅可以在窗口上下文中工作(self 将解析为 window.self),还可以在工作线程上下文中工作(然后 self 将解析为 WorkerGlobalScope.self)。