严格、宽松模式

在JavaScript中,严格模式(Strict Mode)是一种不同的运行模式,它可以让代码在更严格的条件下运行,从而帮助开发者编写更安全、更健壮的代码。与之相对的是宽松模式(Sloppy Mode),这是JavaScript的默认运行模式。

严格模式(Strict Mode)

  1. 启用严格模式

    • 可以在全局范围内启用严格模式,也可以在函数内部启用。
    1// 全局严格模式
    2'use strict';
    3
    4// 函数内部严格模式
    5function strictFunction() {
    6    'use strict';
    7    // 函数代码
    8}
  2. 严格模式的特点

    • 限制全局变量:在严格模式下,赋值给未声明的变量会导致错误。
    • 禁止使用 with 语句with 语句在严格模式下是不允许的,因为它会引入作用域链的不确定性。
    • 禁止 this 在全局上下文中指向全局对象:在严格模式下,全局 this 指向 undefined
    • 禁止使用 arguments.calleearguments.caller:这些属性在严格模式下不可用。
    • 禁止八进制字面量:在严格模式下,以 0 开头的数字被视为八进制字面量,这是不允许的。
    • 函数参数名称重复:在严格模式下,如果函数参数名称重复,会导致语法错误。
    • 保留字:在严格模式下,使用保留字作为变量名会导致错误。
    • 更严格的错误处理:例如,删除不可删除的属性会抛出错误,而不是静默失败。

宽松模式(Sloppy Mode)

  1. 默认模式

    • 这是JavaScript的默认运行模式,不使用 'use strict' 声明的情况下,代码就是在宽松模式下运行。
  2. 宽松模式的特点

    • 全局变量:在宽松模式下,赋值给未声明的变量会创建一个全局变量。
    • 允许 with 语句:虽然不推荐使用,但宽松模式下仍然允许使用 with 语句。
    • 全局 this:在全局上下文中,this 指向全局对象(如 window 对象)。
    • 允许 arguments.calleearguments.caller:这些属性在宽松模式下可用,但不建议使用。
    • 允许八进制字面量:以 0 开头的数字被视为八进制字面量。
    • 参数名称重复:在宽松模式下,重复的函数参数名称不会导致错误,但只有最后一个参数会被使用。
    • 保留字作为变量名:在宽松模式下,使用保留字作为变量名不会导致错误,但不建议这样做。
    • 错误处理:宽松模式下的错误处理相对宽松,例如,删除不可删除的属性会静默失败。

总结

严格模式提供了更严格的代码执行环境,有助于避免一些常见的JavaScript错误和不良实践。在现代JavaScript开发中,推荐使用严格模式,因为它可以提高代码的安全性和可维护性。在编写代码时,可以通过在文件或函数的开头添加 'use strict'; 来启用严格模式。