在javascript
中闭包已经成了一个很神秘,让人高山仰止的存在。javascript
今天又对闭包进行了一番搜索,有了一种明悟:闭包就至关于黑盒的钥匙。当你手握闭包,黑盒就能为你所用。java
为何这么说呢?这个想法来自于这篇文章:闭包
function foo(x) { var tmp = 3; return function (y) { alert(x + y + tmp); x.memb = x.memb ? x.memb + 1 : 1; alert(x.memb); } } var age = new Number(2); var bar = foo(age); // bar 如今是一个引用了age的闭包 bar(10);
若是一个函数访问了它的外部变量,那么它就是一个闭包。
注意,外部函数不是必需的。经过访问外部变量,一个闭包能够维持(keep alive)这些变量。在内部函数和外部函数的例子中,外部函数能够建立局部变量,而且最终退出;可是,若是任何一个或多个内部函数在它退出后却没有退出,那么内部函数就维持了外部函数的局部数据。闭包常常用于建立含有隐藏数据的函数(但并不老是这样)。函数