闭包最主要概念:有权访问另一个函数作用域内变量的函数
function add(){var result;result = function(x,y){return y+x } return result }var sum = new add(); console.log(sum(10,20))/*30*/
函数会执行的主要原因就在于()
function createFunctions(){var result = new Array();for (var i=0; i < 10; i++){result[i] = function(){return i;};}return result; } var funcs = createFunctions();for (var i=0; i < funcs.length; i++){console.log(funcs[i]()); } /*打印出10个10*/
原因在于返回的函数都引用了变量i,但它并非立即执行,等到函数都返回是i=10
function createFunctions(){var result = new Array();for (var i=0; i < 10; i++){result[i]=(function(num,count){return function (){return num+count}})(i,3)}return result; } var funcs = createFunctions();for (var i=0; i < funcs.length; i++){console.log(funcs[i]()); } /*正确打印1-10*/
内部有立即执行函数,也就是()执行环境