【问题标题】:var a;(function(){let a=10;console.log(a);})();var a;(function(){let a=10;console.log(a);})();
【发布时间】:2017-04-15 09:49:25
【问题描述】:
var a;(function(){let a=10;console.log(a);})();

为什么它作为未捕获的语法错误抛出错误:标识符“a”已经被声明,尽管两者的范围不同。

【问题讨论】:

  • var a;let a; 都是声明,因此 a 已在 let a = 10; 已经存在的范围内重新声明
  • 你能提供更多的上下文吗?你提供的解析代码对我来说运行得很好。
  • var 在全局范围内声明一个变量,而 let 在块范围内声明一个变量,这意味着 a 已经使用 var a 声明了;所以删除 let 并执行 a=10;

标签: ecmascript-6


【解决方案1】:

那里没有语法错误,见:

var a;(function(){let a=10;console.log(a);})();

您很可能正在使用诸如 NodeJS replChrome DevTools 之类的沙盒或解释器,并且您已经使用 let a 在在同一 repl 会话中您的先前实验之一中的全局范围。

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 2013-05-27
    • 2021-09-17
    • 2012-10-15
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多