以下代码始终打印传递给参数a
的参数,而不管是否存在具有相同名称的变量。
大概是因为参数标识符分别绑定(bind)到作用域中的变量。他们的位置在哪里?他们在词汇环境中吗?
function foo(a, b = () => a) {
var a = 1
console.log(b())
}
foo() // undefined
foo(2) // 2
当参数位于LexicalEnvironment中时,
var
声明是否以特殊的VariableEnvironment结尾? let
和const
通过使重新定义成为早期错误来避免冲突?也相关:
最佳答案
在any default values are present的情况下,将为参数创建一个单独的环境记录。
在此位置声明的函数的语义使得该环境记录定义其本地范围。 note in the spec(请参阅第28条)说:
the spec的更多内容:
因此,在没有默认参数的情况下,我推断出一个预先存在的词汇环境(VariableEnvironment或LexicalEnvironment)用于参数绑定(bind)。也许。
关于javascript - 词汇环境中的论点位于何处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61208843/