在Node 4.0中,当您从命令行执行脚本时,脚本将被包装(在函数中),使this
不引用全局对象。
[~]$ cat global.js
console.log(this===global);
[~]$ node -v
v4.0.0
[~]$ node global.js
false
足够公平。事实上,有很多StackOverflow问题解决了这个问题。这是完全有道理的,也是正确的。
我做的不期待的是:
[~]$ cat x.js
let x=10;
[~]$ node x.js
(function (exports, require, module, __filename, __dirname) { let x=10;
^^^
在ES2015 Spec中它表示"模块代码始终是严格的模式代码。"
我是否理解Node.js作为脚本执行的代码不是"模块"?如果它不是模块,它是什么?如何区分模块代码和非模块代码?或者Node是否仍然符合标准?标准的第15节(" Scripts and Modules")要么不清楚脚本和模块之间的区别,要么我错过了一些非常明显的东西。
只是一个"模块"进口时? (就像在ruby中使用$0
和__FILE__
以及在Python中使用__name__
和"__main__"
的方式一样?)似乎总是必须使用"use strict"
在脚本中。