nodejs中命令行启用严格模式好像不起作用

按书上说在js文件第一行中写入'use strict'和在node命令中启用--use_strict参数的效果是一样的,但我实际测试中却有差异。如下:

'use strict'

function demo(){
  console.log(this.a); 
}
const a = 1;
demo();

我执行这段代码,直接报错:TypeError: Cannot read property 'a' of undefined 符合预期
但我去掉第一行,执行node --use_strict test.js,正常输出undefined,这两种方式启用严格模式的方法明显有差异呀,我错过了什么?

阅读 5k
3 个回答

node 命令行参数:

10.x LTS

12.x

都没有找到 --use_strict

========================
node 背后使用的的引擎是 v8 ,所以可以将许多 v8 的选项传给 node ,再由 node 转给 v8。这些选项并非由 node 维护,node 也不能控制,所以在 node 的文档中是找不到的。

但是,node 提供了一个选线, node --v8-options 来列出所有的 v8 选项。

node 12.6.0 中,其中第一个就是:

  --use-strict (enforce strict mode)
        type: bool  default: false

但是对于这些 v8 选项,出了这里列出的说明之外,貌似很难找到官方的说明。

========================
另外有一片 stackoverflow 的回答大家可以看看:https://stackoverflow.com/a/5...

加'use strict'启用严格模式,这个没什么问题

造成这个差异可能是这样因为--use_strict(or --use-strict)是V8引擎的参数,V8为了兼容老的js程序,在es6的严格模式下又自己做了些妥协,所以造成了这个差异。so,如果真心启用严格模式,还是如fefe所说,老老实实在js文件的第一行加入'use strict'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题