先来说说闭包的概念:由于在JavaScript中,函数是对象,对象是属性的集合,而属性的值又可以是对象,则在函数内定义函数成为理所当然,如果在函数func内部声明函数inner,然后在函数外部调用inner,这个过程即产生了一个闭包。
1、闭包的特性
var outter = []; function test(){ var array = ["one","two","three","four"]; for(var i = 0;i<array.length;i++){ var x = {}; x.no = i; x.text = array[i]; x.invoke = function(no){ return function(){ print(no); } }(i); outter.push(x); } } test();
闭包允许你引用在于外部函数中的变量,然而,他并不是使用该变量创建时的值,相反,他会使用外部函数中该变量最后的值。
2、闭包的用途:匿名函数自执行函数
var test1 = { table : [], tree : {} }; (function(dm){ for(var i = 0;i<dm.table.rows;i++){ var row = dm.table.rows[i]; for(var j= 0;j<row.cells;i++){ drawCell(i,j); } } })(test1);
创建了一个匿名函数。并立即执行它,由于外部无法引用他内部的变量,因此在执行完成后很快会被释放,最主要是这种机制不会污染全局对象。