严格模式通过”use strict”启用,禁用不安全语法、使未声明变量赋值报错、this在普通函数中为undefined、禁止八进制字面量等歧义语法,并约束eval和arguments行为,提升代码安全性与可维护性。

JavaScript 严格模式(Strict Mode)是一种让代码运行在更安全、更规范环境中的机制。它通过在脚本或函数顶部添加 "use strict"; 指令启用,会禁用一些不安全、易出错或已被淘汰的语法和行为,同时让某些静默错误变为显式报错。
变量必须先声明再使用
在非严格模式下,给未声明的变量赋值会自动创建一个全局变量,这容易引发意外污染和难以排查的 bug。严格模式下,这种操作会直接抛出 ReferenceError。
例如:
非严格模式(不报错,但危险):
myVar = 42; // 静默创建全局变量 myVar
立即学习“Java免费学习笔记(深入)”;
严格模式(立即报错):
"use strict";
myVar = 42; // Uncaught ReferenceError: myVar is not defined
✅ 建议:始终用 let、const 或 var 显式声明变量。
this 不再默认指向全局对象
在非严格模式的普通函数中,如果函数独立调用(如 foo()),其内部的 this 会指向全局对象(浏览器中是 window)。严格模式下,此时 this 为 undefined,避免意外修改全局状态。
✅ 建议:依赖 this 的函数应明确绑定上下文(如用 call、bind 或箭头函数),或确保在对象方法中调用。
禁止使用被废弃或有歧义的语法
严格模式会拒绝以下写法:
八进制字面量(如 010)→ 改用 0o10 重复的函数参数名(如 function foo(a, a) { })→ 会报 SyntaxError 对只读属性赋值(如 NaN = 5)→ 报 TypeError 删除不可删除的属性(如 delete Object.prototype)→ 报 TypeError
这些限制帮你提前发现潜在问题,而不是等到运行时才暴露。
eval 和 arguments 行为更可控
严格模式下:
• eval 不再能向外部作用域注入变量;
• arguments 不再与形参自动同步(修改 arguments[0] 不影响对应参数值);
• arguments 和 eval 不能作为变量名或函数名使用。
✅ 这减少了隐式耦合,让代码逻辑更可预测,也利于引擎优化。
严格模式不是“新语言”,而是现有 JavaScript 的增强约束层。现代开发中,模块(.mjs 文件或 ES 模块)默认启用严格模式,无需手动加 "use strict"。即使写普通脚本,也建议主动启用——它不会改变正确代码的行为,只会帮你避开常见陷阱。
以上就是javascript严格模式是什么_它会如何改变你的代码行为?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544058.html
微信扫一扫
支付宝扫一扫