gpt4 book ai didi

javascript - node.js 模块和函数中 "this"的含义

转载 作者:IT老高 更新时间:2023-10-28 21:56:55 25 4
gpt4 key购买 nike

我有一个由 require 加载的 JavaScript 文件。

// loaded by require()

var a = this; // "this" is an empty object
this.anObject = {name:"An object"};

var aFunction = function() {
var innerThis = this; // "this" is node global object
};

aFunction();

(function(anyParameter){
console.log(anyParameter.anObject);
})(
this // "this" is same having anObject. Not "global"
);

我的问题是:this in var a = this; 是一个空对象,而函数中的 this 语句是 node.js 的影子全局对象。我知道 this 关键字在函数中是不同的,但我不明白为什么第一个 this 不等于全局,而函数中的 this 等于全局。

node.js如何在函数作用域内将global注入(inject)到this,为什么不将其注入(inject)到模块作用域?

最佳答案

您必须了解以下几个基本事实才能澄清情况:

  • 在 Node 模块的顶层代码中,this 等价于 module.exports。那就是你看到的空对象。

  • 当你在函数中使用 this 时,this 的值在每次执行之前重新确定函数,其值为determined by how the function is executed .这意味着如果调用机制不同(例如 aFunction()aFunction.call( newThis)emitter.addEventListener("someEvent", aFunction); 等)在您的情况下,非严格模式下的 aFunction() 运行this 设置为全局对象的函数。

  • 当 JavaScript 文件被 required 作为 Node 模块时,Node 引擎在包装函数内运行模块代码。使用设置为 module.exportsthis 调用该模块包装函数。 (回想一下,上面的函数可以使用任意的 this 值运行。)

因此,您会得到不同的 this 值,因为每个 this 驻留在不同的函数中:第一个在 Node 创建的模块包装函数内部,第二个在aFunction 的内部。

关于javascript - node.js 模块和函数中 "this"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770299/

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