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

JavaScript中with()语句替换改写方法及写法正误咨询

第二种写法是正确的。

原理说明

with(obj) 语法的作用是将指定对象临时加入作用域链的最顶层,其代码块内所有未显式声明、未指定所属对象的标识符,都会优先从该对象的属性中查找匹配。

你原代码中的with块:

with( area )
    surface = ( x2 - x1 ) * ( y2 - y1 );

等价的完整显式写法就是:

area.surface = ( area.x2 - area.x1 ) * ( area.y2 - area.y1 );

第一种写法的问题

第一种写法中用到的x2、x1、y2、y1没有显式绑定到area对象,你当前的函数作用域内并没有定义这些独立变量,运行时会直接抛出ReferenceError: x2 is not defined的错误,无法正常执行。

额外说明:with语法因为会导致作用域查找逻辑不清晰、存在变量泄露的风险,在严格模式下已经被禁用,日常开发更推荐使用第二种显式访问对象属性的写法,可读性和可维护性都更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 01:24:05