登录
首页 >  文章 >  前端

JavaScriptwith用法及使用建议

时间:2026-01-27 18:32:34 395浏览 收藏

小伙伴们有没有觉得学习文章很有意思?有意思就对了!今天就给大家带来《JavaScript with 语句用途及不推荐原因》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

with语句是JavaScript中已被弃用的语法,它将对象临时加入作用域链以简化属性访问,但因作用域不透明、性能差、易致静默错误且不兼容严格模式而被禁用,推荐使用解构赋值等安全替代方式。

javascript with语句是什么_为什么它不被推荐使用?

with 语句是 JavaScript 中一个早已被弃用的语法结构,它的作用是将某个对象临时添加到当前作用域链的前端,使得该对象的属性可以像局部变量一样直接访问,无需重复写对象名。

with 语句怎么用?

例如:

const obj = { x: 1, y: 2 };
with (obj) {
  console.log(x + y); // 3,等价于 obj.x + obj.y
}

这段代码中,xy 被当作当前作用域中的标识符处理,JavaScript 引擎会自动在 obj 上查找它们。

为什么它不被推荐?

  • 作用域行为不透明:with 动态改变了作用域链,让代码的实际执行路径难以静态分析,IDE 和工具无法可靠推断变量来源,影响自动补全、重构和类型检查
  • 性能开销大:每次进入 with 块,引擎必须在运行时重建作用域链,并在所有后续变量查找中多一层对象属性检索,现代 JS 引擎(如 V8)会直接禁用部分优化(如内联缓存)
  • 容易引发静默错误:比如赋值时若属性不存在,可能意外创建全局变量(严格模式下会报错,但非严格模式下很危险)
  • 与严格模式不兼容:ES5 严格模式明确禁止使用 with,任何包含 with 的脚本在严格模式下都会语法报错,而现代开发基本默认启用严格模式

有什么更安全的替代方式?

  • 用解构赋值提取所需属性:const { x, y } = obj;,清晰、高效、无副作用
  • 用临时变量缓存对象引用:const o = obj; console.log(o.x + o.y);
  • 封装逻辑到函数或方法中,避免长对象链重复书写

它在 ES5 就已被标记为“禁止在严格模式下使用”,所有主流浏览器和构建工具(如 Babel、ESLint)都默认警告或拒绝解析。现在写代码完全没必要用它,也不应该用它。

以上就是《JavaScriptwith用法及使用建议》的详细内容,更多关于的资料请关注golang学习网公众号!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>