JavaScript 关键字 `with` 是否真的已经被弃用?

4

使用JavaScript的with语句长期以来被认为是不良的编码实践,并且被建议不要使用。

此页面指出with已经被弃用,在严格模式下会引发错误,我的浏览器在严格模式下使用with时会报错,而Google Closure编译器会提示严格模式不允许使用with

JSC_USE_OF_WITH: The with statement cannot be used in strict mode.

根据MDN的说法,建议避免使用with,但是截至今天,它似乎并没有被废弃,且似乎没有被列入严格模式下代码限制的示例

这看起来有些矛盾和令人困惑。那么,with到底是否被废弃了呢?


3
我认为除了禁止在严格模式内使用之外,它实际上从未被弃用。最终,真的没有理由使用 with。 - epascarello
@JJJ,我错过了MDN链接中关于它在严格模式下不允许的声明,谢谢你指出来。为什么不把它作为答案提供呢? - Tomas Langkaas
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Simplifying_variable_uses - Andrew Bone
我猜,就像@deceze所说的那样,在“严格模式”下引发错误的任何语句都已被弃用。 - Cody G
1
@epascarello 是非常有用的模板语言!它在 Vue.js 中被用来将变量注入到用户在 HTML 中定义的表达式中。 - user3413723
显示剩余3条评论
1个回答

7
这是TC39组(发布ECMAScript规范的人员)的官方立场:

为什么我们不会废弃功能呢?

在Web上,废弃并不起作用。由于我们无法移除坏特性,开发者很少有动力停止使用某个特性,只因为别人不喜欢它。将特性标记为“已废弃”,却从未将其删除是毫无意义的。

http://tc39wiki.calculist.org/about/faq/#deprecate

因此,在ECMAScript标准中,它可能永远不会被正式废弃;然而,在社区中,关于with是不好的一致共识足够强烈,以至于大牌(编译器和引擎实现者)选择在严格模式下或使用某些严格编译器时将其视为已废弃。

“大牌玩家们已经选择将其视为弃用(deprecated),如果您选择进入严格模式(strict mode)。”实际上,这不是一个选项。根据规范,在严格模式下,“with”语句是无效的。这些玩家通常选择不优化(或取消优化)包含“with”语句的函数。 - Duarte Cunha Leão

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接