以下代码始终打印传递给参数a的参数,而不管是否存在具有相同名称的变量。

大概是因为参数标识符分别绑定(bind)到作用域中的变量。他们的位置在哪里?他们在词汇环境中吗?

function foo(a, b = () => a) {
  var a = 1
  console.log(b())
}
foo() // undefined
foo(2) // 2


当参数位于LexicalEnvironment中时,var声明是否以特殊的VariableEnvironment结尾? letconst通过使重新定义成为早期错误来避免冲突?

也相关:
  • 8.3.2 ResolveBinding(name [, env])
  • 8.1.1 Environment Records
  • 最佳答案

    any default values are present的情况下,将为参数创建一个单独的环境记录。

    在此位置声明的函数的语义使得该环境记录定义其本地范围。 note in the spec(请参阅第28条)说:



    the spec的更多内容:



    因此,在没有默认参数的情况下,我推断出一个预先存在的词汇环境(VariableEnvironment或LexicalEnvironment)用于参数绑定(bind)。也许。

    关于javascript - 词汇环境中的论点位于何处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61208843/

    10-10 18:42
    查看更多