gpt4 book ai didi

javascript - node.js:在全局范围内混淆 'this' 的用法

转载 作者:IT老高 更新时间:2023-10-28 23:20:47 26 4
gpt4 key购买 nike

我最近一直在玩 node.js,我遇到了一个关于在模块的全局范围内使用 this 的奇怪行为。

this 绑定(bind)到全局范围内的 module.exports:

console.log(this === exports); // -> true

this 在方法范围内绑定(bind)到全局:

(function() { console.log(this === global); })(); // -> true

这也导致了这种令人困惑的行为:

this.Foo = "Weird";
console.log(Foo); // -> throws undefined

(function() { this.Bar = "Weird"; })();
console.log(Bar); // -> "Weird"

我想解决方案是永远不要在全局范围内使用 this 而是显式使用 extendsglobal ,但是有没有这一切背后的逻辑还是 node.js 中的错误或限制?

最佳答案

这背后的“逻辑”是,this 的值始终取决于函数的调用方式

在您的情况下,您有一个自执行匿名函数,this 总是引用全局对象(非严格模式)或 undefined(ES5 严格)。

如果您想访问“外部”this 值,您可以在执行该函数之前存储一个引用,例如

var outerScope = this;

(function() { outerScope.Bar = "Weird"; })();
console.log(Foo); // -> throws undefined

或者重新.bind()函数的作用域自己,比如

(function() { this.Bar = "Weird"; }).bind(this)();

关于javascript - node.js:在全局范围内混淆 'this' 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com