junglehunter96

Results 4 comments of junglehunter96

这些数据完全可以自己在easy mock上创建啊 胖哥都把数据给出来了 图片自己添加就行了

从定义上讲 : 闭包其实是一个绑定了执行环境的函数,所以广义的闭包其实就对应了JS中的函数。 它的执行环境是函数词法环境,由环境记录器和作用域链组成。 而通常我们所讲的闭包是在一个函数 A 内部有一个函数 B,通过函数 B 记录访问函数 A 内的变量。 因为作用域的关系,函数A外部无法直接访问内部数据,而通过闭包这种方法可以让我们可以间接访问 函数内部的私有变量,利用这一特性我们可以用来封装私有变量,实现数据寄存等

大大我还是有个地方没搞懂 举个例子 `var i = 10; function f1() { var i = 5; return function f2() { console.log(i++); } } var f3 = f1(); f3(); //5 f3(); //6 ` f2作为返回值传给变量f3,此时f3的词法环境是和f2的词法环境一样,所以f3()的输出结果是5.但是当二次调用f3()的时候,输出结果却变为了6;这一步没看懂,词法环境按理说i处于f3的父作用域里,怎么会被改变了,这就好比局部变量覆盖了全局变量,我怎么都理解不了这一步了,为什么i再次调用f3(),输出i值会发生变化,是我哪个概念没搞懂啊

谢谢大大的回答,我终于明白之前的问题出在哪了,这两天看了一些文章,主要还是因为闭包中引用的自由变量是保存在堆地址中,故闭包在调用完成之后,引用的自由变量不会销毁会在内存中,不知道我这个理解是否有误啊