var test = function() {
var val = 0;
var add = function(num) {
val += num;
return val;
};
return add;
};
var instance = test();
console.log(instance(3)); // 3
console.log(instance(4)); // 7
看了一个资料,说instance 是一个闭包。由 add 函数, 和创建 add 函数时的环境(变量 val)组成,不理解......
instance
是什么?是test
函数的返回值。test
函数的返回值是什么?是add
。add
是什么?add是个函数。所以
instance
是test
返回的一个函数。这个函数是不是闭包?只要看函数里有没引用到函数定义外面的变量就可以了。
看
add
的定义,发现用到了在外面的val
,所以是个闭包。当然不是所用引用了外部变量的就是闭包,引用的外部变量的函数还要被返回到外部作用域外的地方。