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

在with语句内定义函数外部调用:Safari是否不符合ES规范?

with语句中函数声明的跨浏览器行为差异与规范一致性问题

以下代码在Safari执行时会抛出Can't find variable: foo错误,但在Chrome和Firefox中可以正常运行并输出bar:

let obj = {foo:"bar"};
with(obj) {
  function test() {
    console.log(foo);
  }
}
test();

我想明确的问题:

  • 上述差异中,是Safari的行为不符合ECMAScript规范,还是Chrome与Firefox的行为不符合规范?
  • 如果该行为有明确的规范定义,请说明对应的ECMAScript规范章节内容。

注:本问题仅聚焦于行为是否符合规范,不涉及该问题的修复方案、with语句在现代JS开发中的合理性,以及with是否已被废弃等内容,相关信息我已了解。

(个人推测:或许with针对此类场景的行为未被规范明确界定?不过这是个比较简单的案例,所以我倾向于认为是Safari存在Bug。)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:52:01