关于闭包的终极解释
在学校里总有一些初学JS的新同学再询问闭包是什么?那么接下来将以我的理解讲述一下闭包
要说闭包首先要讲一个名词 自由变量
什么叫做自由变量 看下列代码
var a = 100 function fn() { var b = 200 console.log(a) //a没有在函数作用域内找到 便向上父级作用域查找 因此也称a为自由变量 console.log(b) }
以上a便是自由变量 --------当前作用域没有定义的变量 那么与闭包有什么关系呢
经过笔者大量查询参考 关于闭包理解觉得最通透的一句话为 内部函数引用内部变量并被外部所引用成为闭包 看以下例子
var a=200;
function F1() { var a = 100 return function () {
a++ ; console.log(a) //内部函数引用内部变量 } } var f1 = F1() //被外部所引用 f1() //101
f1() //102
为什么是101 102 而不是201 202?
因为自由变量将从作用域链中去寻找,但是 依据的是函数定义时的作用域链,而不是函数执行时;
而闭包也油然而生,执行f1 我们将在定义时的F1中寻找到自由变量a 而不是在全局作用域的a 而且也保持了F1中的a在内存中没有被销毁 再执行f1的时候再次找到其并再增1;
这便是我所理解的闭包。

浙公网安备 33010602011771号