function makeAdder(a) { return function(b) { return a + b; } } x = makeAdder(5); y = makeAdder(20); x(6) ? y(7)
?
x(6) // 返回 11 y(7) // 返回 27
每当javascript执行一个函数的时候,会创建一个'范围对象',并用来保存在这个函数中创建的局部变量。它和被传入函数的变量一同被初始化。这与那些保存的所有全局变量和函数的全局对象(global object)相似,但有一些很重要的不同点是:第一,每次函数被执行的时候,就会创建一个新的,特定的范围对象;第二,与全局对象(在浏览器里面是当做 window 对象来访问的)不同的是,你可以从javascript代码中直接访问范围对象。目前并没有机制可以遍历当前的范围对象里面的属性。
所以当调用
【注】摘选自MDN,仅作为笔记供参考makeAdder
时,创建了一个范围对象,它带有一个属性:a
,被当做参数传入makeAdder
函数。makeAdder
然后返回一个新创建的函数。通常JavaScript的垃圾回收器会在这个点上清理掉makeAdder
创建的范围对象,但是返回的函数却保留着一个指向那个范围对象的引用。结果,这个范围对象将不会被垃圾回收器回收,直到指向makeAdder
返回的那个函数对象的引用计数为零。
js闭包note
最新推荐文章于 2022-12-03 20:49:30 发布