严格模式

ES5 引入了严格模式(strict mode)的概念。严格模式是为 JavaScript 定义了一种不同的解析与执行模型。

在严格模式下,ES3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

要在整个脚本中启用严格模式,可以在顶部添加 "use strict";

"use strict";
// code

在 script 标签下也可以:

<script>
  "use strict";
  // code

</script>

要在指定函数中启用严格模式,可以在函数内部的上方添加 "use strict";

function doSomething() {
  "use strict";
  // code
}

"use strict"; 是一个编译指示(pragma),用于告诉支持的 JavaScript 引擎切换到严格模式。这是为不破坏 ES3 语法而特意选定的语法。

使用严格模式可以提高安全性,提高编译器效率,增加运行速度,但是加不加严格模式 JavaScript 的执行结果会有很大不同,所以要注意区别。支持严格模式的浏览器包括 IE10+ 和其它主流浏览器。

下面举一些严格模式下的例子:

  1. 不允许使用未声明的变量
  2. 不允许删除变量、对象、函数
  3. 不允许变量重名
    "use strict";
    function x(p1, p1) {};
    
  4. 不允许对只读属性赋值
  5. 不允许删除一个不允许删除的属性
    "use strict";
    delete Object.prototype;
    
  6. 不允许使用八进制
    "use strict";
    var x = 010;
    
  7. 在作用域 eval() 创建的变量不能被调用,如:
    "use strict";
    eval("var x = 1;");
    alert(x);
    
  8. 不允许非箭头函数的 this 指向 window 对象。:
    "use strict";
    function f() {
      console.log(this);
    }
    f(); // undefined
    
  9. 不允许使用保留关键字作为变量

参考:

《JavaScript 高级程序设计第三版》
JavaScript 严格模式(use strict)

文中图片可能来自网络,侵删

Leave a comment