什么是JavaScript中的严格模式?

来源:IPIPP.com作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《什么是JavaScript中的严格模式?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《什么是JavaScript中的严格模式?》有用,将其分享出去将是对创作者最好的鼓励。

JavaScript中的严格模式是一种特殊的运行模式,它会改变JavaScript代码的执行方式,消除语法中的一些静默错误,优化代码的执行效率,同时禁止使用一些未来版本可能会定义的语法。启用严格模式后,代码在运行时会执行更严格的语法检查,帮助开发者提前发现潜在的代码问题。

什么是JavaScript中的严格模式?

严格模式的启用方式

严格模式可以全局启用,也可以只在函数内部局部启用,两种方式的写法略有不同。

全局启用严格模式

在脚本文件的最顶部添加use_strict字符串即可全局启用严格模式,注意这行代码必须放在所有其他语句之前,否则不会生效。

// 全局启用严格模式
"use strict";

// 后续所有代码都会按照严格模式执行
var a = 10;
console.log(a);

局部启用严格模式

如果只想在某个函数内部启用严格模式,可以在函数的开头添加use_strict字符串,这样只有该函数内部的代码会遵循严格模式的规则。

function test() {
    // 函数内局部启用严格模式
    "use strict";
    var b = 20;
    console.log(b);
}

// 函数外部的代码还是普通模式
var c = 30;
console.log(c);

严格模式的核心限制规则

严格模式对代码的约束主要体现在以下几个方面,这些限制能有效避免很多常见的编码错误。

变量相关限制

普通模式下,如果给一个未声明的变量赋值,会自动创建一个全局变量,而严格模式下会直接抛出错误。

"use strict";

// 未声明变量直接赋值,严格模式下会报错
x = 10; // ReferenceError: x is not defined

同时严格模式禁止删除不可删除的变量,比如使用var声明的变量或者函数,尝试删除会抛出错误。

"use strict";

var num = 5;
delete num; // SyntaxError: Delete of an unqualified identifier in strict mode.

函数相关限制

严格模式下,函数不能有重名的参数,普通模式下重名参数不会报错,后面的参数会覆盖前面的,而严格模式下会直接提示语法错误。

"use strict";

// 函数参数重名,严格模式下报错
function add(a, a) { // SyntaxError: Duplicate parameter name not allowed in strict mode
    return a + a;
}

另外严格模式下,函数内部的this不再默认指向全局对象,如果函数是普通调用,this的值为undefined,而不是window(浏览器环境)或者global(Node环境)。

"use strict";

function showThis() {
    console.log(this);
}

showThis(); // 输出 undefined,普通模式下输出 window

语法相关限制

严格模式禁止使用一些不安全的语法,比如with语句,使用with语句会导致严格模式下的语法错误。

"use strict";

var obj = {name: "test"};
// 使用with语句,严格模式下报错
with(obj) { // SyntaxError: Strict mode code may not include a with statement
    console.log(name);
}

同时严格模式下,八进制字面量也不能使用,普通模式下var num = 0123是合法的八进制写法,严格模式下会抛出错误。

"use strict";

// 八进制字面量,严格模式下报错
var num = 0123; // SyntaxError: Octal literals are not allowed in strict mode.

严格模式的使用建议

建议在所有的JavaScript项目中都启用严格模式,尤其是新写的代码,这样可以提前规避很多隐式错误,让代码更符合规范。如果是维护旧项目,可以逐步在函数级别启用严格模式,避免一次性修改带来的兼容性问题。另外严格模式是向后兼容的,不支持严格模式的旧浏览器会忽略use_strict字符串,不会报错,只是不会执行严格模式的规则,所以启用严格模式不会对旧环境造成负面影响。

对比项普通模式严格模式
未声明变量赋值自动创建全局变量抛出ReferenceError
函数参数重名允许,后参数覆盖前参数抛出SyntaxError
函数普通调用的this指向全局对象值为undefined
with语句允许使用抛出SyntaxError
严格模式并不是限制开发者的所有操作,而是通过更严格的规则帮助开发者写出更健壮、更易维护的代码,是JavaScript开发中非常实用的特性。

在实际开发中,结合代码检查工具比如ESLint,再配合严格模式,能进一步提升代码的质量,减少线上问题的出现概率。

JavaScript严格模式use_strict语法检查代码规范修改时间:2026-06-03 01:07:08

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。