首页 > 解决方案 > 当执行在同一`with`语句中声明的函数时,在`with`语句中声明的“找不到变量”

问题描述

显然,应该不惜一切代价避免这种情况是不言而喻with的,但这不是关于最佳实践的问题——而是关于 Safari 的 JS 引擎中潜在的错误行为的问题。

我的问题基本上可以归结为:下面的代码是否应该在不抛出错误的情况下运行?

with({}) {
  let a = 1;
  function foo() {
    console.log(a);
  }
  foo();
}

在 Firefox 和 Chrome 中是这样,但 Safari 会抛出一个错误,指出a无法找到该变量。只是确认这是一个错误,而不是我们被警告关于 REwith语句的“有点未定义/未指定的行为”。

更改let avar a修复错误。

https://jsbin.com/hiwihiyaxi/edit?html,console

标签: javascriptsafariwith-statement

解决方案


推荐阅读