Javascript" s"严格模式"在生产中

时间:2015-01-04 07:56:05

标签: javascript

我最近在JavaScript中遇到了“严格模式”。我知道严格的模式对于让程序员以正确的方式编写JavaScript非常重要。我的问题是,在将脚本放到网上时删除“严格模式”会带来更好的“稳定性”吗?这样做是好的做法吗?此外,“严格模式”是否有助于提高您的网络应用程序的性能?

1 个答案:

答案 0 :(得分:3)

理论上 - 以草率模式运行会导致错误

删除严格模式会更改语言的语义,并可能会在严格模式下开发的大型代码库中引入微妙的错误。例如,arguments对象在严格模式下的行为不同,在基元上调用方法时this也是如此,因此依赖于其中任何一个的代码都会中断。

行为分歧的一些例子:

(function(){ console.log(typeof this === "object") }).call(5); // logs true
(function(){ "use strict"; console.log(typeof this === "object") }).call(5); // false

(function(x){  arguments[0] = 3; console.log(x) })(5); // logs 3
(function(x){ "use strict"; arguments[0] = 3; console.log(x) })(5); // logs 5

在实践中,它并没有那么糟糕

大多数边缘情况都是你不应该遇到的事情。严格模式有助于捕获错误,例如隐式声明全局变量并将全局对象指定为this。如果您的代码在IE9上运行,它无论如何都不能使用严格模式,它在IE9中以草率模式运行,在较新的浏览器上运行严格模式。我个人在sloppy模式下运行多个这样的代码库,在严格模式下运行其他浏览器,因此我从未碰到过实际的错误。

关于表现

删除严格模式"动态范围"通过使arguments表现得很好并且禁止使用假设通过删除整个查找层来更快地执行 - 这就说现代浏览器在他们身上发现了这样的事情所以你不应该感受到很大的性能差异。严格模式的主要优点是它有助于防止细微的错误。