NodeJS 严格模式

11

在NodeJS中使用"use strict"有什么优势吗?例如,全局对象不是一个好的使用方式,因为所有请求都会改变该对象(当然假设该对象应该对每个用户都是唯一的)。在这种情况下,使用严格模式是一个好主意,对吗?

我觉得在Node中使用严格模式是一个好主意,但是我通过Google没有找到任何它的优缺点。

免责声明:我知道use strict是什么,这个问题关注的是服务器端的优缺点!

1个回答

15

嗯,清晰度和速度。

与 SO 中流行的答案和问题所说的不同,严格模式和 "use strict" 指令的真正主要目标是消除 JavaScript 中的 动态作用域,这就是为什么不允许通过 arguments 更改参数以及更改 arguments 本身,为什么不允许使用 with 等等。

清晰度

严格模式不允许动态作用域,因此您始终可以静态地知道变量指的是什么。在非严格模式下,with 语句、通过参数更改变量和其他类型的非静态作用域会使代码更难读。

// example from referenced thread
// global code
this.foo = 1;

(function () {
  eval('var foo = 2');

  with ({ foo: 3 }) {
    foo // => 3
    delete foo;
    foo // => 2
    delete foo;
    foo // => 1
    delete foo;
    foo // ReferenceError
  }
}());

在严格模式下可以避免这种头疼。

速度

严格模式比非严格模式快得多。由于可以假定许多内容不会更改并且可以解决引用的方式,因此许多优化只能在严格模式下进行。V8在内部广泛使用此功能。

参考资料:


5
在同一个示例中使用witheval?我感到震惊,因为互联网没有爆炸! - Sterling Archer
1
由于更高的明确度,测试变得更加容易。由于更严格的要求,例如使用JSHint检查,可以更轻松地发现小错误,例如变量赋值中的错误。 - Prem
1
我真的很喜欢这个答案,它清晰简洁。你花时间写了一个非常好的答案,谢谢你。 - JΛYDΞV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接