相关疑难解决方法(0)

NodeJS中的"全局"对象是什么

我刚刚this在NodeJS环境中看到了关键字的奇怪行为.我用代码列出它们.我NodeJS v6.x用一个JavaScript文件运行这些代码.

在使用以下一行代码进行测试时,无论是否使用该'use strict'语句,都指向一个空对象{}.

console.log(this)
Run Code Online (Sandbox Code Playgroud)

但是,当我在自执行函数中运行语句时,

(function(){
  console.log(this);
}());
Run Code Online (Sandbox Code Playgroud)

它正在打印一个非常大的对象.在我看来环境创建的全局执行上下文对象NodeJS.

在使用'use strict'语句执行上述功能时,预计会打印undefined

(function(){
  'use strict';

  console.log(this);
}());
Run Code Online (Sandbox Code Playgroud)

但是,在使用浏览器(我只测试过Chrome)时,前三个示例产生window对象,最后一个示例undefined按预期方式给出.

浏览器的行为是可以理解的.但是,如果是NodeJS,它不会创建执行上下文,直到我在函数内部包装?

那么,大多数代码NodeJS运行时都是空的全局 object

javascript scope global this node.js

43
推荐指数
5
解决办法
2万
查看次数

Node中存储的变量在哪里?

在任何Web浏览器中,执行以下脚本将导致'wee'发送到控制台.在节点中它发送{}.

var d = 'wee';
console.log(this.d);
Run Code Online (Sandbox Code Playgroud)

我意识到Node this在这种情况下指的是exports对象.我知道global变量,这不是我想要访问的.此外,上面的脚本也没有d在全局对象上设置.它到底在哪里?我可以console.log(d);在上面的脚本中明确地访问它,但它似乎被隐藏在一些非标准空间中,完全没有任何理由.

我也意识到删除var意志会dglobal对象上声明,这是预期的行为,尽管var在顶层范围内将其值存储在与"裸"变量不同的位置似乎很愚蠢.我的意思是,模块系统不应该是某种数字预防措施来防范全球污染吗?在这里打破模式似乎很容易,因此很难做出标准的事情.

d也未在module对象上声明.

我没有必要证明我为什么要问这个问题,但我会回答第一个问题,但是"你为什么要做什么?"

var d = {};
d.bleep = 'y';
var a = Object.keys(d);

d.bloop = 'y';
d.blop = 'y';

var b = Object.keys(d);

// c = b - a;
var c = b.filter(function (item) {
    if(a.indexOf(item) === -1) {
        return true;
    }
    return false;
});

console.log(a,b,c);
Run Code Online (Sandbox Code Playgroud)

以我可以区分某些对象状态的方式d,我应该能够区分顶级范围的状态.在浏览器中,这是 …

javascript variables scope global-variables node.js

5
推荐指数
1
解决办法
891
查看次数

Nodejs 模块中的“this”是什么意思?

我有一个如下所示的简单代码并将其作为节点模块执行:

\n\n
console.log(this);\nmodule.exports = {\xe2\x80\xa6};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道这global是默认上下文(就像window在浏览器中一样),但是this关键字指的是什么呢?

\n

javascript global this node.js

2
推荐指数
1
解决办法
510
查看次数

标签 统计

javascript ×3

node.js ×3

global ×2

scope ×2

this ×2

global-variables ×1

variables ×1