ES5在语言中加入了一个“strict模式”,它收紧了一些特定行为的规则。一般来说,这些限制被视为使代码符合一组更安全和更合理的指导方针。另外,坚持strict模式一般会使你的代码对引擎有更强的可优化性。strict模式对代码有很大的好处,你应当在你所有的程序中使用它。

    根据你摆放strict模式注解的位置,你可以为一个单独的函数,或者是整个一个文件切换到strict模式:

    1. function foo() {
    2. "use strict";
    3. // 这部分代码是strict模式的
    4. function bar() {
    5. // 这部分代码是strict模式的
    6. }
    7. }
    8. // 这部分代码不是strict模式的

    将它与这个相比:

    1. "use strict";
    2. function foo() {
    3. // 这部分代码是strict模式的
    4. function bar() {
    5. // 这部分代码是strict模式的
    6. }
    7. }
    8. // 这部分代码是strict模式的

    使用strict模式的一个关键不同(改善!)是,它不允许因为省略了var而进行隐含的自动全局变量声明:

    1. function foo() {
    2. "use strict"; // 打开strict模式
    3. a = 1; // 缺少`var`,ReferenceError
    4. }
    5. foo();

    如果你在代码中打开strict模式,并且得到错误,或者代码开始变得有bug,这可能会诱使你避免使用strict模式。但是纵容这种直觉不是一个好主意。如果strict模式在你的程序中导致了问题,那么这标志着在你的代码中几乎可以肯定有应该修改的东西。

    strict模式不仅将你的代码保持在更安全的道路上,也不仅将使你的代码可优化性更强,它还代表着这种语言未来的方向。对于你来说,现在就开始习惯于strict模式要比一直回避它容易得多 —— 以后再进行这种转变只会更难!

    注意: 关于strict模式的更多信息,参见本系列的 类型与文法 的第五章。