在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
相关产品推荐
相关产品推荐

