闭包最主要概念:有权访问另一个函数作用域内变量的函数
function add(){ var result; result = function(x,y){ return y+x } return result } var sum = new add(); console.log(sum(10,20))/*30*/
在函数内访问某个变量是根据函数作用域链来判断变量是否存在,而函数作用域链是程序根据函数所在的执行环境栈来初始化的。
https://www.jianshu.com/p/26c81fde22fb
函数会执行的主要原因就在于()
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*/
内部有立即执行函数,也就是()执行环境