当前位置: 首页 > 面试题库 >

Node.js:在模块范围内使用时,“ this”运算符的上下文是什么?

许波涛
2023-03-14
问题内容

代码

我编写以下代码并将其另存为test.js:

var foo = 'I am local';
global.foo = 'I am global';

function print () {
     console.log(this.foo);
};

print(); 
console.log (this.foo);

然后,我使用命令在终端中运行它,node test.js并返回:

I am global
undefined

问题

为什么不返回

I am global
I am global


问题答案:

在Node模块内部,this从设计上讲是指模块的exports对象:

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

使console.log(this.foo)等于console.log(exports.foo)

换句话说,既不this引用全局对象,也不局部变量神奇地成为的属性exports

由于exports.foo不存在,您得到了undefined



 类似资料:
  • 问题内容: 当我在node.js模块中执行此操作时: 去哪儿了?我的意思是:在浏览器中(如果未在函数中执行或以其他方式执行) 如果我执行此操作: 然后可以在中找到它,但这不是我想要的。 问题答案: 与浏览器不同,浏览器默认情况下将变量分配给全局空间(即窗口),而在Node中, 除非您 将变量 明确 分配给module.exports, 否则 变量的作用域为模块(文件)。 实际上,当您运行或文件中的

  • 我正在学习Flutter的计算功能。我对它的理解是,它用于将计算繁重的工作卸载到另一个线程,以免阻塞UI线程。我遇到了一些我不太理解的行为。考虑下面的应用程序。 _testCompute函数的输出是: 它编译得很好。我希望与。有人能解释为什么不是吗?我还尝试了一种不同的方法,使用这里描述的“globals”,但结果是一样的。

  • 问题内容: 我给自己做了一个小模块,碰巧经常使用它。每当我需要它时,只需将其复制到要使用的文件夹中即可。由于我很懒,所以我想安装它,以便可以从任何地方调用它,即使是交互式提示也是如此。因此,我读了一些有关在此处安装的信息,并得出结论,我需要将文件复制到/usr/local/lib/python2.7/site- packages。但是,这似乎没有任何作用。 有人知道我需要将模块复制到哪里才能在系统

  • 问题内容: 如果您打开Python解释器,然后输入“ import this”,您将知道: 提姆·彼得斯(Tim Peters)撰写的《 Python之禅》 美丽胜于丑陋。 显式胜于隐式。 简单胜于复杂。 复杂胜于复杂。 扁平比嵌套更好。 稀疏胜于密集。 可读性很重要。 特殊情况不足以违反规则。 尽管实用性胜过纯度。 错误绝不能默默传递。 除非明确地保持沉默。 面对模棱两可的想法,拒绝猜测的诱惑。

  • 问题内容: 查看当前时间是否在发言和讲话之间的最佳方式是什么。 我会想到以下内容,不确定是否正确: 请让我知道如果这是正确的方法,可以写出更好的东西吗? 问题答案: 我最初的答案非常具体地针对所提出的问题,并且不适应午夜的时间范围。由于六年后这仍然是公认的答案,因此我在下面合并了@rouble的答案,该答案在我的文档中得到扩展以支持午夜。 我仍然坚持下面的原始意见,即该逻辑的大多数应用程序可能更适

  • 问题内容: 在其他任何地方都可以访问在静态块内声明的变量吗?他们是什么样的成员(即,他们也是静态成员吗​​?) 问题答案: 通常,程序员不需要在静态块内声明任何变量,通常这仅是为了确保初始化静态变量以供类的所有实例使用(取决于静态变量的范围)。 与方法和构造函数变量一样,在静态块内声明的变量将在该块内是局部的。 JDK文件