Effective JavaScript读书笔记(一)
Effective JavaScript
了解你使用的JavaScript版本
strict mode
什么是严格模式
ES5中引入了严格模式,使用严格模式,能允许你选择在受限制的JavaScript版本中禁止使用一些JavaScript语言中问题较多或易于出错的特性。
1 "use strict"Eg1.
1234 function f(x){"use strict"//TODO}Eg2.
1234 function f(x){"use strict"var arguments = []; //error: redefinition of arguments}Eg2的代码在严格模式下会报错,因为在严格模式下,不允许重定义arguments变量。
- “use strict”的位置
“use strict”指令只有在脚本或函数的顶部才能生效,对于脚本连接会变得敏感,例如对于一些大型的应用软件,当使用多个独立的文件,然而部署在产品环境时却需要连接成一个单一的文件。Eg3.
1234567891011121314 //file1.js"use strict"function f(){//TODO}//TODO而另一个文件不是运行与严格模式下://file2.js//no strict-mode directivefunction g(){var arguments = [];//TODO}//TODO如下我们以file1.js文件开始,那么连接后的代码运行于严格模式下,file2里面的代码就会报错。
Eg4.
12345678910111213 //file1.js"use strict"function f(){//TODO}//TODO//file2.js//no strict-mode directivefunction f(){var arguments = [];//error: redefinition of arguments//TODO}//TODO如下我们以file2.js文件开始,那么连接后的代码运行于非严格模式下。
Eg5.
12345678910111213 //file2.js//no strict-mode directivefunction g(){var arguments = [];//TODO}//TODO//file1.js"use strict"function f(){ //no longer strict//TODO}//TODO上面的两个例子都不能解决当一个文件使用严格模式一个不使用严格模式的连接问题,在自己的项目中,我们可以坚持只使用“严格模式”或“非严格模式”的策略,但如果要编写健壮的代码应对各种各样的代码连接,我们有如下两个可选方案。
- 方案一
不要将进行严格模式检查的文件和不进行严格模式检查的文件连接起来。方案二
如下通过将其自身包裹在立即调用的函数表达式
123456789101112131415161718 //no strict-mode directive(function(){//file1.js"use strict";function f(){//TODO}//TODO})();(function(){//file2.js//no strict-mode directivefunction f(){var arguments = [];//TODO}//TODO})();当我们构建代码以获得最大的兼容性时,最简单的方法是在严格模式编写代码,并显式地选择严格模式,如下代码所示。
1234567 (function(){"use strict";function f(){//TODO}//TODO})();为了达到更为普遍的兼容性,建议在严格模式下编写代码。