JavaScript的严格模式有哪些容易被忽略的限制?

严格模式通过禁止隐式全局变量、重复参数名、with语句等,提升代码安全与可维护性。1. 未声明变量赋值报错;2. 禁止删除变量或不可配置属性;3. 函数参数名必须唯一;4. arguments与参数解绑;5. 禁用with;6. 函数内this为undefined。这些限制减少错误,增强代码可靠性。

javascript的严格模式有哪些容易被忽略的限制?

JavaScript的严格模式(”use strict”)在提升代码安全性和可维护性方面作用明显,但其中一些限制容易被开发者忽视,导致意外错误或行为变化。以下是几个常被忽略的关键点。

1. 无法隐式创建全局变量

在非严格模式下,给未声明的变量赋值会自动创建一个全局变量。但在严格模式下,这会抛出错误。

例如:

错误写法:
function example() {
  user = “John”; // 未用 var/let/const 声明
}
example(); // 严格模式下报错:ReferenceError: user is not defined

必须显式声明变量,避免污染全局作用域

2. 禁止删除不可配置的属性和变量声明

严格模式禁止使用 delete 删除变量名、函数名或不可配置的属性,否则会抛出语法错误。

立即学习“Java免费学习笔记(深入)”;

常见误用场景:delete myVar; // 若myVar是变量声明,会报错 delete Object.prototype; // 不可配置,报错

delete 只能用于对象的可配置属性,不能用于变量或函数声明。

3. 函数参数名必须唯一

在严格模式下,函数定义中不允许有重复的参数名,否则会直接报错。

示例:

function test(a, a, b) {
  “use strict”;
  return a + b;
}
// 语法错误:Duplicate parameter name not allowed in this context

非严格模式下第二个 a 会覆盖第一个,但严格模式直接拒绝这种写法。

4. arguments 对象不再与参数绑定

在非严格模式中,修改命名参数会影响 arguments 对应的值,反之亦然。严格模式切断了这种绑定关系。

对比行为:

function f(a) {
  “use strict”;
  a = 10;
  console.log(arguments[0]); // 仍为调用时传入的值,不会变
}
f(5); // 输出 5,而非 10

这一变化让参数和 arguments 更独立,但也可能影响依赖旧行为的代码。

5. 禁止使用 with 语句

with 语句在严格模式下完全被禁用,使用会导致语法错误。

原因:

with 会动态改变作用域链,干扰变量查找和编译器优化,严格模式直接将其排除。

替代方案是显式引用对象属性,提高代码清晰度。

6. this 不再指向全局对象

在非严格模式中,函数内部的 this 在未绑定时默认指向全局对象(浏览器中是 window)。严格模式下 this 保持 undefined。

影响场景:普通函数调用时 this 为 undefined,防止意外修改全局对象 构造函数若未用 new 调用,this 不会指向 window,减少潜在 bug

这对编写健壮的库代码尤为重要。

基本上就这些。虽然严格模式限制多,但正是这些“麻烦”帮助我们写出更可靠、更易调试的 JavaScript 代码。开启它,值得。

以上就是JavaScript的严格模式有哪些容易被忽略的限制?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1523902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 16:19:15
下一篇 2025年12月20日 16:19:29

相关推荐

发表回复

登录后才能评论
关注微信