我一直在试图围绕范围,特别是闭包。我知道有很多关于这个主题的帖子,而且我已经阅读了很多。但是大多数地方都将主题称为高级,并且使用相对难以掌握的术语。我想绝对确定我的基础知识是正确的,这样我就不会冒险进入更复杂的主题,而对函数的真正工作方式有错误的想法。
所以......我选择了一个基本功能,并且真的希望有人告诉我我认为它在幕后发生的事情是否是实际发生的事情。
这是代码:
function sum(a) {
return function(b) {
return a+b
}
}
console.log( sum(1)(sum(2)))
(我知道它实际上并没有做总和,我对其进行了调整,试图了解每个步骤中发生了什么。)
所以,我的主要疑问是为什么 A 是 1,而不是 2。我得出的结论是,闭包被创建,一旦function(b)
被创建sum(2)
作为参数,就在被返回之后sum(1)
。因此,根据闭包的定义,我假设在创建函数时它还保存了词法环境(其中a = 1
)。这是正确的吗?
我已经制作了步骤图。