查看addSuffix函数的代码时
const addSuffix = (x) => {
const concat = (y) => {
return y + x
}
return concat;
}
let add_ful = addSuffix("ful");
如果我是console.log(add_ful);为什么我得到
(y) => {
return y + x
}
而不是
(y) => {
return y + "ful"
}
对于我来说这是关于闭包的最令人困惑的一点,我明白我可以返回一个函数,但我不确定在函数中存储对“ful”的引用。
x的值存储在add_ful函数中的哪个位置?
答案 0 :(得分:2)
该值未存储在代码中。在闭包中使用x
的每个地方都没有内联 - 代码仍然包含一个变量x
,当遇到它时它会被动态解析(它仍然是可写的)。
该值存储在包含变量的范围对象中,并由函数对象引用(我们称之为closure)。您还可以在记录函数对象时检查devtools中隐藏的[[Scope]]
插槽(而不仅仅是.toString()
生成的函数代码):
答案 1 :(得分:1)
console.log
记录函数本身的字符串表示。它不会查询函数的状态并显示正在引用的当前值。它只显示了用于创建函数的语法。
但是,如果设置断点并完成执行,则可以使用调试工具查看范围内变量的状态。