gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:57:48 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"
);

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

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 文件作为 Node 模块require时,Node 引擎会在包装函数内运行模块代码。该模块包装函数是通过将 this 设置为 module.exports 来调用的。 (回想一下,上面的函数可以使用任意的 this 值运行。)

因此,你会得到不同的 this 值,因为每个 this 都驻留在不同的函数中:第一个在 Node-created module-wrapper 函数中,第二个是在 aFunction 中。

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

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