一文带你了解一下JavaScript中什么是严格模式

作者:闭包旅人时间:2026-10-31 08:23:27浏览:441

本文深入解析JavaScript严格模式(Strict Mode)的核心概念与运行机制。通过对比正常模式,详细阐述其在变量声明、this指向、函数参数及arguments对象等方面的限制与改进。文章结合具体代码示例,说明如何启用严格模式及其对代码安全性和性能的提升作用,帮助开发者编写更规范的JavaScript代码。

前言

JavaScript 属于动态弱类型语言,具备自身语法、数据类型及表达式。因弱类型特性未对数据类型做严格要求,且早期设计仓促、未充分考量复杂应用需求,相较于 Java 设计过于简单紧凑,故引入严格模式以弥补缺陷。

什么是严格模式

严格模式是 ECMAScript 5 引入的运行模式,旨在让 JavaScript 在更严格条件下运行,定义了不同的解析与执行方式。

ECMAScript 是由 Ecma 国际在标准 ECMA-262 中定义的脚本语言规范,可视为 JavaScript 的标准。

通过添加特定编译指示符(即 "use strict")启用。该模式禁用不安全行为,使 JavaScript 引擎执行时更严格地检查代码错误,减少潜在问题,确保代码更合理、安全、严谨。

<script>
  // 开启严格模式
  "use strict";
  x = 10
  console.log(x)
</script>

在控制台打印过程中报错

前言

它支持全局或局部使用,例如在函数内部启用严格模式。

  x = 10
  console.log(x)

  function fun() {
    "use strict";
    y = 20
    console.log(y)
  }
  fun()

非严格模式下 x 可成功打印,而严格模式下 fun 函数内的 y 会报错提示未定义。

前言

作用

变量声明

正常模式中未声明赋值的变量会提升为全局变量;严格模式下变量必须显式声明。

"use strict";
let name = '小明'
console.log(x)

// error
name = '小明'
console.log(x) // name is not defined

禁止删除变量

正常模式可使用 delete 删除变量;严格模式下仅允许删除对象属性。

"use strict";
let a = 1
delete a // 'delete' cannot be called on an identifier in strict mode.

此外,严格模式下对不可删除属性、对象只读属性赋值,或对 getter 方法读取的属性赋值均会报错。

函数参数

严格模式下参数名不可重复,Duplicate parameter name not allowed in this context 意思是 此上下文中不允许有重复的参数名称。

  "use strict";
  function fun(name, name, name) { // Duplicate parameter name not allowed in this context
    console.log(111)
  }

函数 this

正常模式全局调用时函数内部值为全局对象;严格模式下函数内部 this 值为 undefined。

"use strict";
function fun() {
  console.log(this); // 输出 undefined
}
fun();

// 正常模式
function fun() {
  console.log(this); // 输出 window 对象
}
fun();

禁用 with

with 用于按序检索对象列表以解析变量名,其语句用于临时拓展作用域链。

"use strict";
var obj = { name: '小明' };
with (obj) {
  console.log(name); // 'with' statements are not allowed in strict mode.
}

禁用 eval

eval() 函数计算 JavaScript 字符串,并将其作为脚本代码执行。

eval("var x = 10");

arguments

arguments 是传递进函数的参数列表,为类数组对象,属性名按传入顺序排列,具有 length 属性。严格模式下对其有限制。

严格模式下,arguments 不再追踪参数的变化。

"use strict";
function fun(name) {
  name = '张三'
  return [name, arguments[0]]
}
console.log(fun('小明')) // [ 张三 小明 ]

// 正常模式
function fun(name) {
  name = '张三'
  return [name, arguments[0]]
}
console.log(fun('小明')) // [ 张三 张三 ]

在正常模式下,打印 arguments。

function fun(name) {
    return arguments
}
console.log(fun('小明'))

如图显示 arguments 有着 callee 该属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。

前言

而在严格模式下无法调用 callee。

"use strict";
function fun(name) {
    return arguments
}
console.log(fun('小明'))

callee 属性中报错,表示不能在严格模式函数或对其进行调用的arguments对象上访问“caller”、“callee”和“arguments”属性。

前言

总结

严格模式使代码更规范,帮助避免常见错误、降低不确定性、提高编译器效率及运行速度。它增加了限制和检查,影响项目代码,需根据项目决定是否使用。

到此这篇关于一文带你了解一下JavaScript中什么是严格模式的文章就介绍到这了,更多相关JavaScript严格模式内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章