闭包是指有权限访问另一个函数作用域中变量的函数
创建闭包的常见方式是在一个函数内部创建另一个函数。
与之相关概念:作用域 作用域链
作用域:当某个函数被调用时,会创建一个执行环境及相应作用域链,
作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。
当前变量是当前执行代码所在环境的变量对象,下一个变量来自包含(外部)环境,再下一个变量来自下一个包含环境,这样一直延伸到全局执行环境。
作用域链这种配置机制,引出一个副作用:
闭包只能取得包含函数中任何变量的最后一个值。
function createClosure(limitedNumber, string){ var result = []; for (var i = 10; i >= 0; i--) { result[i] = function(){ return i; } } return result; }
返回的都是 10