You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript关键字`with`是否确实已被废弃?

关于JavaScript with 语句的现状答疑

咱们先把这事儿说透——with语句绝对是JavaScript圈子里被黑了几十年的“不良编码典范”,完全不推荐使用。

为啥大家都讨厌它?

  • 变量查找太混乱:with会改变作用域链的优先级,你写的变量到底是来自with包裹的对象,还是全局变量,有时候连写代码的人自己都懵,后续维护代码的人更是要骂娘。
  • 性能拉胯:JS引擎对with块里的代码根本做不了优化,因为变量的指向是动态的,编译阶段没法确定,执行速度直接打折扣。

严格模式下的实锤

你观察到的情况完全正确:

  • 只要开启了严格模式(在代码顶部加'use strict';),用with直接就抛语法错误,比如Chrome会提示Uncaught SyntaxError: Strict mode code may not include a with statement。
  • 像Google Closure Compiler这类代码检查工具,也会直接亮红警告,明确说严格模式不允许用with——相当于从开发环节就把这条路堵死了。

关于“废弃”的争议点

你提到的MDN说法是对的:截至目前,with并没有被ECMAScript标准正式标记为“废弃”(也就是没从标准里移除),但标准文档里明明白白写着强烈建议避免使用,而且各大浏览器厂商也都站在“抵制with”的阵营里。

为啥会有“已废弃”的传言?大概率是因为它被严格模式彻底封杀,加上社区、工具的全面排斥,给人一种“已经被废掉”的错觉,但从标准层面来说,它还没被打上deprecated的标签。

最后给个准信

别纠结它是不是“正式废弃”了——不管标准怎么定义,现在前端圈的共识就是:绝对不要在生产代码里用with。哪怕你能绕开严格模式,它带来的维护成本和性能问题,都远远抵不上那点“少写几个对象前缀”的便利。

内容的提问来源于stack exchange,提问作者Tomas Langkaas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:30:32