Javascript闭包
我正在努力学习JS,关于javascript闭包,我有一个问题-Javascript闭包,javascript,closures,Javascript,Closures,我正在努力学习JS,关于javascript闭包,我有一个问题- function fooOuter(){ var a = 10; var b = 20; return function fooinner(x){ return a + b + x; }; } 这是否意味着Javascript中的内部函数存储对位于同一范围内的所有变量的引用。i、 e.在这种情况下,fooinner是否存储变量a和b的引用。fooinner将为返回的每个fooinner实例保留
function fooOuter(){
var a = 10;
var b = 20;
return function fooinner(x){
return a + b + x;
};
}
这是否意味着Javascript中的内部函数存储对位于同一范围内的所有变量的引用。i、 e.在这种情况下,fooinner是否存储变量a和b的引用。fooinner将为返回的每个fooinner实例保留a和b的值。换句话说,每个函数将等于10+20+x。实际上,它是一个闭包和部分闭包。fooInner将为返回的每个fooInner实例保留a和b的值。换句话说,每个函数将等于10+20+x。实际上,它是一个闭包和一个部分。有效地说,是的。有一个由运行时创建的所谓“范围链”,链中的链接只有在不再被引用时才会被释放
fooinner()
有自己的作用域,有一个指向fooOuter()
作用域的“父作用域”链接,依此类推——这是fooinner()
的作用域链
因此,由
fooinner()
使用并在其外部定义的变量将至少在该特定函数对象存在的时间内继续存在。有效,是的。有一个由运行时创建的所谓“范围链”,链中的链接只有在不再被引用时才会被释放fooinner()
有自己的作用域,有一个指向fooOuter()
作用域的“父作用域”链接,依此类推——这是fooinner()
的作用域链
因此,由
fooinner()
使用并在其外部定义的变量将至少在特定函数对象存在的时间内继续存在。这是我从培训中获得的一些事实。我希望这有帮助
创建函数时,会为其分配[[scope]]属性
它引用外部词法范围的变量并防止
他们不会被垃圾收集。因此,闭包是在
函数创建
闭包引用变量而不是值。因为每个功能
调用发生在唯一的执行上下文中,我们保证
参数变量在连续调用中的唯一性
需要注意的是,闭包创建过程是相同的
对于每个函数,每个函数都创建一个闭包
这是我从培训中得到的一些事实。我希望这有帮助 创建函数时,会为其分配[[scope]]属性 它引用外部词法范围的变量并防止 他们不会被垃圾收集。因此,闭包是在 函数创建 闭包引用变量而不是值。因为每个功能 调用发生在唯一的执行上下文中,我们保证 参数变量在连续调用中的唯一性 需要注意的是,闭包创建过程是相同的 对于每个函数,每个函数都创建一个闭包
是的,差不多就是这样 简单地说,闭包就是可以访问其父上下文数据的上下文。无论是在Stackoverflow还是在Web上,都有很多很好的解释
但是,在没有更详细的说明的情况下,内部函数
fooinner
被解析的第二秒,ECMAscript解释器在内部设置了一个到外部函数的链接(我们分别称之为Activation Object和Lexical Environment Record)。是的,它基本上就是这样做的
简单地说,闭包就是可以访问其父上下文数据的上下文。无论是在Stackoverflow还是在Web上,都有很多很好的解释
但是,在不深入讨论更多细节的情况下,内部函数fooinner
被解析的第二秒,ECMAscript解释器就在内部设置了一个到外部函数的链接(我们分别称之为Activation Object和Lexical-Environment-Record)