qinyi素材网
当前位置: 首页 > WEB教程 > JS中‘use strict’的作用

JS中‘use strict’的作用

  时间: 2021-12-08   阅读:658
简要教程

通过‘use strict’在任何其他语句之前包含,可以将严格模式应用于整个脚本或单个函数 。那使用它有什么好处呢?下面将详细解释。

作用详情

通过'use strict'在任何其他语句之前包含,可以将严格模式应用于整个脚本或单个函数 。

// script.js
'use strict';
const x = "Hello from a strict mode script";

// other.js
function strict() {
  'use strict';
  const x = 'Hello from a strict mode function';
}

这会强制对 JavaScript 代码进行更严格的解析和错误处理,如下所述。

没有意外的全局变量
严格模式使得不可能由于错误输入变量名而意外创建全局变量。赋值会意外创建全局变量,但在严格模式下会引发错误:

'use strict';
myVariable = 42;
// 假设没有全局错误,上面的行将抛出ReferenceError
// 名为myVariable的变量先前已声明

消除无声错误

严格模式将一些以前接受的错误变成了错误。这些包括:

  • 否则会默默失败的分配
  • 删除不可删除的属性或普通名称
  • 函数参数中的重复名称
  • 以 0 为前缀的八进制文字
  • 设置基元的属性
'use strict';

let undefined = 5; // TypeError (non-writable global)
let obj = {};
Object.defineProperty(obj1, 'x', { value: 1, writable: false });
obj.x = 2; // TypeError (non-writable property);

delete Object.prototype; // TypeError (undeletable property)
delete something; // SyntaxError (plain name)

const sum (a, b, b) { // SyntaxError (duplicated argument name)
  return a + b + b;
}

const x = 012; // SyntaxError (0-prefixed octal literal)

false.true = 10; // TypeError (property on primitive)

简化版 eval

严格模式eval通过防止在周围范围内引入新变量而变得更加透明。在严格模式下,eval仅为正在评估的代码创建变量。

'use strict';
let x = 1;
eval('let x = 3; console.log(x);'); // LOGS: 3
console.log(x); // LOGS: 1

简化版 arguments

严格模式arguments通过消除它们的一些副作用来简化。arguments没有别名,因此它们总是在调用函数时引用原始参数。此外,arguments.calleearguments.caller不再支持。

没有this包装

严格模式通过限制访问全局对象使 JavaScript 更加安全this。在严格模式下,this不被装箱(强制成为一个对象),这意味着如果未指定,它将undefined代替全局对象。

'use strict';
function f() {
  return this;
}

f(); // undefined

其他变化

严格模式实现了一些更多的、不太常见的变化。这些包括:

  • with 被禁止,如果使用会导致错误
  • Function.prototype.argumentsFunction.prototype.caller是不可删除的属性,在设置或检索时抛出
  • implements, interface, let, package, private, protected, public, static, 和 yield是保留关键字
  • 函数语句只允许在函数脚本的顶层
上一篇: 下一篇: