什么是严格模式?
  javascriptWeb   0 评论

什么是严格模式?

  javascriptWeb   0 评论

什么是严格模式?

严格模式是一种在 JavaScript 代码运行时自动实行更严格的解析和错误处理的方法,这种模式可以使 JavaScript 在更严格的条件下运行

如何使用严格模式?

"use strict";

最好只在函数内使用严格模式

function doSomething() {
    "use strict";
}

如果想要将严格模式应用于多个函数

(function () {
    "use strict";

    function doSomething() {

    }

    function doSomethingElse() {

    }
}());

ES6 的模块自动采用严格模式,不管在头部有没有加上 "use strict"

严格模式主要有哪些限制?

  1. 全局变量显式声明
    变量必须先声明,再使用
  2. 禁止使用 this 关键字指向全局对象
  3. 禁止删除变量
    严格模式下无法删除变量,只有 configurable 设置为 true 的对象属性才能被删除
  4. 对象不能有重名的属性
    正常模式下,重名的属性后者会覆盖前者,但是在严格模式下,这属于错误的语法
  5. 函数不能有重名的参数
    正常模式下,如果函数有多个参数可以使用 arguments[i] 读取,在严格模式下,这是错误语法
  6. 不能使用八进制整数直接量(如:023)
  7. 不允许使用转义符
  8. 不能对只读属性进行赋值
  9. 不允许对一个使用 getter 方法读取的属性进行赋值
  10. 不允许删除一个不允许删除的属性
  11. 变量名不能使用 evalarguments 的字符串(什么是eval函数?
  12. 不允许使用 with 函数(什么是with函数?
  13. eval 不会在他的外层作用域引入变量
  14. 保留关键字 implementsinterfaceletpackageprivateprotectedpublicstaticyield
  15. evalarguments 不能被重新赋值
  16. 严格模式中,arguments 对象是传入函数内实参列表的静态副本,非严格模式下,arguments 对象里的元素和对应的实参是指向同一个值的引用,所以 arguments 不会自动反应函数的变化([什么arguments?]())
  17. 不能使用 arguments.calleearguments.caller
  18. 不能使用 fn.callerfn.arguments 获取函数的调用堆栈
  19. 严格模式中 call apply 传入 null undefined 保持原样不被转换为 window

为什么要使用严格模式?

  1. 消除 JavaScript 语法中的一些不合理、不严谨之处,减少一些怪异行为;
  2. 消除代码运行的一些不安全之处,保证代码运行的安全;
  3. 提高编译效率,增加运行速度;
  4. 为未来新版本的 JavaScript 做好铺垫;

注意: 经过测试 IE 6、7、8、9 均不支持严格模式。

参考来源

回复