11-严格模式
7.11 严格模式
ES5的语法允许存在隐式全局变量,而这正是那些令人懊恼的编程错误的源头。简而言之,如果忘记使用 var 声明某个变量,JavaScript会不假思索地认为开发人员在引用一个全局变量。如果该全局变量不存在,它会替开发人员创建一个!大家可以想象一下这会造成什么问题。
出于这个(以及其他的)原因,JavaScript引进了严格模式,它能阻止隐式全局变量。在开始编写代码之前,单独插入一行字符串 "use strict" (单引号和双引号都可以)就可以启用严格模式。如果在全局作用域中这么做,整个脚本会以严格模式执行。而如果在函数中使用它,该函数就会以严格模式执行。
因为在全局作用域中使用严格模式之后,它会应用于所有脚本代码,所以使用时要谨慎一些。很多流行的网站在部署前会整合所有脚本,一旦某个脚本文件中开启了全局严格模式,那么所有的文件都会启用这个模式。当然,如果所有脚本都正常工作就万事大吉了,但往往不会这么顺利。所以通常不建议在全局作用域中使用严格模式。如果不想在每个函数中都开启一次严格模式(谁会愿意这么麻烦呢?),那么可以将所有代码封装在一个立即执行的函数中(将在第13章中了解更多):
(function() {
'use strict';
// 所有代码从这里开始...代码会按照严格模式执行,不过严格模式不会干扰组合在一
// 起的其他脚本
})();
严格模式通常被认为是个好东西,推荐使用它。如果使用了格式检查工具(应该这么做),它会帮助用户从类似的问题中解脱出来,而这种双重校验只会带来更多的好处。
想要了解更多严格模式的用途,欢迎阅读MDN关于严格模式的文章 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)。