I amQiana , WELCOME.

NO TRY , NO HIGH

[读书笔记]Effective JavaScript-01-use strict

最近买了一堆堆的书,在大牛的建议一下,作为小白的我在看《Effective JavaScript编写高质量JavaSript代码的68个有效方法》


严格模式(strict mode)是由ES5引入的作为版本控制的考量特性,允许我们在受限制的JavaScript版本中禁止使用一些问题较多,容易出错的特性。
其语法设计是向后兼容的,因此在没有实现严格检查的环境中也是可以执行严格代码的(注:严格代码期望运行在严格模式下)。

“use strict”

要使用严格模式很简单,只需要在程序的最开始增加”use strict”;字符串,或者在一个方法的开始增加”use strict”;

function f(x){
    "use strict";
    //......
}

加入我们将定义了严格模式的代码运行在ES3引擎上,解释执行该字面量是没有任何副作用的。但是旧的引擎不会进行任何严格模式检查,也就是说如果使用了严格模式的代码没有在ES5及以上的引擎上做过测试,就很容易出现错误。
所以,我们应该总在完全兼容ES5的环境中测试严格模式代码。

严格模式下文件合并

“use strict”只会在文件或者函数的顶部才有效。如何将多个严格模式文件以及非严格模式文件合并为一个文件呢?
如果在合并文件开始引用”use strict”,那么非严格模式会执行在严格模式下。如果不使用”use strict,那么严格模式会执行在非严格模式下。。都是问题。

  • 解决方案一
    不要将进行严格模式检查的文件和不进行严格模式检查的文件合并在一起。(这是最简单也是最理想的解决方案)
  • 解决方案二
    通过将其自身包裹在理解调用的函数表达式中。(将所有要合并的文件都放在局部作用域内,所有每个文件都可以独立决定是否使用严格模式)

    (function(){
        //file1.js 使用严格模式
        "use strict";
        function f(x){
            //....
        }
        //....
    })();
    (function(){
        //file2.js 不适用严格模式
        function f(x){
            //....
        }
        //....
    })();
    

我们要当心连接在不同严格模式下有不同预期的脚本,所以,为了达到更好的兼容性,以及有代码审查的效果,最好是在严格模式下编码。