当函数运行时,生成activation object 1(其中有值或者引用复制),若返回结果中包括函数,且该函数使用的变量仅在上级及以上的scope中定义时,这个返回的函数称之为闭包。当它执行时,生成的activation object 2位于activation object 1的 scope chain之前,从而变量 search时,在activation object 1找到原始变量(值或者地址)的复制,从而到达记忆效果。
闭包产生的必要条件:
(1)函数的执行返回包括对另外函数的引用
(2)该返回的函数有对其作用域外的变量的引用
如
var f = function(){
var a = 1, b = 2;
var t = function(x){
return Math.pow(x,2)*a +b;
}
return t;
}
var s = f();
如上当使用var s = f();时,返回一个闭包。