javascript - 当执行在同一`with`语句中声明的函数时,在`with`语句中声明的“找不到变量”
问题描述
显然,应该不惜一切代价避免这种情况是不言而喻with
的,但这不是关于最佳实践的问题——而是关于 Safari 的 JS 引擎中潜在的错误行为的问题。
我的问题基本上可以归结为:下面的代码是否应该在不抛出错误的情况下运行?
with({}) {
let a = 1;
function foo() {
console.log(a);
}
foo();
}
在 Firefox 和 Chrome 中是这样,但 Safari 会抛出一个错误,指出a
无法找到该变量。只是确认这是一个错误,而不是我们被警告关于 REwith
语句的“有点未定义/未指定的行为”。
更改let a
为var a
修复错误。