相关定义与闭包:
实际上,每个函数都可以被认为是一个闭包。因为每个函数都在其所在域(即该函数的作用域)中维护了某种联系。
但在大多数的时候,该作用于在函数体内被执行完之后就被自行销毁了。---除非发生某些有趣的事情,如上述两个例子,导致该作用域被保留下来。
根据目前所说,我们可以说,如果一个函数会在其父级函数返回之后留住对父级作用域的链接的话,相关闭包就会被建立起来。但这么说太绝对哦,其实每个函数都是一个闭包,,因为每个函数之少都有访问父级(也就是全局作用域)的权限。而全局作用域是不可能被破坏的。
我们再看一个例子。这次我们使用的是函数参数,该参数与函数的局部变量没有神马不同,但她们是被隐式创建的(就是没有var声明):
function F(a){ var N = function(){ retunr a; } a++; return N; } var inner = F(1); inner(); //2
当我们的返回函数被调用时,a其实已经执行过一次递增操作了,所以inner()返回的是更新以后的值。
因此,由此我们可以看出,函数所绑定的是作用域本身,而不是该函数定义时该作用域中的变量或变量所返回的值。
其实也不难吧,我们再来看下一张。