JavaScriptwith用法及使用建议
时间:2026-01-27 18:32:34 395浏览 收藏
小伙伴们有没有觉得学习文章很有意思?有意思就对了!今天就给大家带来《JavaScript with 语句用途及不推荐原因》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!
with语句是JavaScript中已被弃用的语法,它将对象临时加入作用域链以简化属性访问,但因作用域不透明、性能差、易致静默错误且不兼容严格模式而被禁用,推荐使用解构赋值等安全替代方式。

with 语句是 JavaScript 中一个早已被弃用的语法结构,它的作用是将某个对象临时添加到当前作用域链的前端,使得该对象的属性可以像局部变量一样直接访问,无需重复写对象名。
with 语句怎么用?
例如:
const obj = { x: 1, y: 2 };
with (obj) {
console.log(x + y); // 3,等价于 obj.x + obj.y
}
这段代码中,x 和 y 被当作当前作用域中的标识符处理,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学习网公众号!
相关阅读
更多>
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
最新阅读
更多>
-
422 收藏
-
100 收藏
-
444 收藏
-
295 收藏
-
371 收藏
-
178 收藏
-
205 收藏
-
265 收藏
-
353 收藏
-
500 收藏
-
202 收藏
-
451 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习