面试题:use strict 是什么意思?使用它有什么区别?

"use strict"; 是 JavaScript 中的一个指令,用于开启严格模式(Strict Mode)。它不是一条语句,而是一个字面量表达式,告诉 JavaScript 引擎以更严格的标准来解析和执行代码。

你可以将 "use strict"; 放在脚本的顶部(全局严格模式)或函数的开头(函数级严格模式)。

// 全局严格模式
"use strict";
// 后续所有代码都在严格模式下执行

function myFunction() {
  "use strict";
  // 只有这个函数内的代码在严格模式下执行
}

开启严格模式后的主要区别

严格模式的主要目的是消除 JavaScript 语言中一些不安全、不严谨的语法和行为,使代码更安全、更高效,并为未来的 ECMAScript 版本铺路。

1. 禁止意外创建全局变量

在非严格模式下,给未声明的变量赋值会自动创建一个全局变量,这通常是错误的根源。

// 非严格模式
function foo() {
  x = 10; // 没有 var/let/const,但不会报错
}
foo();
console.log(x); // 10 (x 成为了全局变量)

// 严格模式
function bar() {
  "use strict";
  y = 20; // 报错!ReferenceError: y is not defined
}
bar();

2. 禁止删除变量、函数和函数参数

// 非严格模式
var a = 1;
delete a; // 不报错,但通常无效
console.log(a); // 1

// 严格模式
"use strict";
var b = 2;
delete b; // 报错!SyntaxError: Delete of an unqualified identifier in strict mode.

3. 函数参数名不能重复

// 非严格模式
function func1(a, a) { // 允许,但第二个参数会覆盖第一个
  console.log(a); // 输出第二个传入的值
}

// 严格模式
"use strict";
function func2(a, a) { // 报错!SyntaxError: Duplicate parameter name not allowed in this context
}

4. evalarguments 的行为更安全

  • eval 在严格模式下创建的变量不会泄露到外部作用域。
  • arguments 对象是函数参数的静态副本,修改参数不会影响 arguments,反之亦然。
  • 不能使用 arguments.callee(常用于匿名函数递归)。
// 严格模式
"use strict";
function func3(a) {
  a = 10;
  console.log(arguments[0]); // 仍然是传入的原始值,不会随 a 的改变而改变
}

5. this 不再指向全局对象

在非严格模式下,独立函数中的 this 会自动绑定到全局对象(浏览器中是 window)。严格模式下,thisundefined

// 非严格模式
function f1() {
  return this; // 返回 window 对象
}
console.log(f1() === window); // true

// 严格模式
"use strict";
function f2() {
  return this; // 返回 undefined
}
console.log(f2() === undefined); // true

6. 禁止八进制语法

// 严格模式
"use strict";
var octal = 010; // 报错!SyntaxError: Octal literals are not allowed in strict mode.

7. 更多语法限制

  • 保留字限制更严格(如 implements, interface, let, package, private, protected, public, static, yield 等在严格模式下是保留字,不能用作变量名)。
  • 禁止使用 with 语句。

为什么使用 "use strict"

  1. 捕获错误:让一些“静默失败”的错误变成显式的运行时错误,便于调试。
  2. 提高安全性:防止意外的全局变量污染。
  3. 提高性能:严格模式下的代码通常可以被 JavaScript 引擎更好地优化。
  4. 为未来铺路:避免使用未来版本可能废弃的语法。
  5. 代码更清晰:强制开发者写出更严谨、更规范的代码。

总结

"use strict"; 是一个简单而强大的工具,它通过启用一组更严格的解析和执行规则,帮助开发者避免常见的陷阱,写出更安全、更可靠、更高效的 JavaScript 代码。在现代 JavaScript 开发中,强烈推荐在所有脚本或模块中使用严格模式。

THE END
喜欢就支持一下吧
点赞12 分享