我有一个这样的脚本:
var test = function(){
console.log('From test: ' + this);
};
console.log(this);
test();
Run Code Online (Sandbox Code Playgroud)
我运行的是哪个node test.js.而我对脚本的期望是this指向全局对象,但只有this测试函数指向global对象.
console.log(this);实际上指向一个空对象.
我试图理解为什么node.js有这种行为,我误解了this关键字如何在node.js中工作.
原谅我,如果这可能是一个noobie问题,但这应该工作不应该吗?
var elems = [1,2,3,4,5]
for (var i = 0; i <elems.length; i++) {
return (function(e){
console.log(e)
})(i);
}
Run Code Online (Sandbox Code Playgroud)
意思是,它应该吐出来
>>node file.js
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这不是这样做的.而是当它在终端中运行时,它会吐出来
>>node file.js
1
Run Code Online (Sandbox Code Playgroud)
我错过了什么?你能详细说明吗?
在任何Web浏览器中,执行以下脚本将导致'wee'发送到控制台.在节点中它发送{}.
var d = 'wee';
console.log(this.d);
Run Code Online (Sandbox Code Playgroud)
我意识到Node this在这种情况下指的是exports对象.我知道global变量,这不是我想要访问的.此外,上面的脚本也没有d在全局对象上设置.它到底在哪里?我可以console.log(d);在上面的脚本中明确地访问它,但它似乎被隐藏在一些非标准空间中,完全没有任何理由.
我也意识到删除var意志会d在global对象上声明,这是预期的行为,尽管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,我应该能够区分顶级范围的状态.在浏览器中,这是 …
根据MDN的这个解释:
this指的是全局对象然而,以下内容:
var globalThis = this;
function a() {
console.log(typeof this);
console.log(typeof globalThis);
console.log('is this the global object? '+(globalThis===this));
}
a();
Run Code Online (Sandbox Code Playgroud)
...放在文件中foo.js产生:
$ nodejs foo.js
object
object
is this the global object? false
Run Code Online (Sandbox Code Playgroud) 在浏览器中,将按照定义的顺序解析 DOM 并加载和解析脚本。
在 Node.js 中,脚本是如何加载到内存中的?
require初始化时是否遍历了每个文件中的语句定义的整个脚本图,以及生成的对象和值填充堆栈和堆以准备开始执行?
我有一个如下所示的简单代码并将其作为节点模块执行:
\n\nconsole.log(this);\nmodule.exports = {\xe2\x80\xa6};\nRun Code Online (Sandbox Code Playgroud)\n\n我知道这global是默认上下文(就像window在浏览器中一样),但是this关键字指的是什么呢?