Scope 使用let定义的变量不在同一作用域IIFE中定义

Scope 使用let定义的变量不在同一作用域IIFE中定义,scope,var,let,iife,Scope,Var,Let,Iife,下面我有一些代码。我希望它能正确地记录a和b,但结果是,它将a记录为1,b未定义为错误: 未捕获引用错误:未定义b 函数foo{ 变量a=1 设b=2 功能条{ 控制台loga 控制台.logb } } console.logfoo 这是不依赖自动分号插入ASI的原因之一,除非您和可能处理代码的每个程序员都非常清楚ASI的规则 您的代码试图将2作为函数调用,将调用bar函数的结果作为参数传入,因为ASI规则可以合理地将以下IIFE作为let b=语句的一部分。由于调用条发生在声明b之前,直到其

下面我有一些代码。我希望它能正确地记录a和b,但结果是,它将a记录为1,b未定义为错误:

未捕获引用错误:未定义b

函数foo{ 变量a=1 设b=2 功能条{ 控制台loga 控制台.logb } }
console.logfoo 这是不依赖自动分号插入ASI的原因之一,除非您和可能处理代码的每个程序员都非常清楚ASI的规则

您的代码试图将2作为函数调用,将调用bar函数的结果作为参数传入,因为ASI规则可以合理地将以下IIFE作为let b=语句的一部分。由于调用条发生在声明b之前,直到其初始值设定项运行之后才声明,因此您会得到错误

如果我们稍微更改换行符,您可以看到发生了什么:

函数foo{ 变量a=1 设b=2功能条{ 控制台loga 控制台.logb }; } console.logfoo;