最近复习js的时候看到闭包,简单记录下。
学习闭包需要知道的知识点–作用域
简单说就是全局变量和局部变量嘛,
区分全局变量和局部变量并不难,但这里有一点不要搞混了,也是很重要的,局部变量可以访问全局变量,但对于全局变量来说局部变量是无法访问不可获取的。进一步的说,局部变量的作用域内,它可以一层一层的向上访问各个作用域的全局变量,反之不行。这就是js的链式作用域
这里是三层作用yu的第三层作用域可以访问第一二层的作用域,反之无法访问,这就是链式作用域。
闭包是什么
我们已经知道,我们现在很难访问函数体内的变量,因为局部变量对于他的父作用域是不可见的,那么如果
我们想要在output函数里输出b,肯定是不可行的,这时闭包就可以解决问题
这就是闭包,简单地说就是定义在一个函数内部的函数,而这个内部的函数可以把它父函数的变量输出,(可以读取其他函数内部变量的函数)
这里要说一下的是某学习网站给的闭包格式
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
这种写法是js函数的自调用,不太容易看,其实就是把return简写了,有兴趣的可以自己查查。
闭包作用
1.获取其它函数内部变量
2 当一个函数执行完后,如果其内部定义了变量,那么函数运行结束,变量生存周期结束,变量内存被清除,而这个函数暂时不会,所以闭包就让函数内部的变量的生存周期跟这个函数一样了,这就可以让变量长时间存在于内存中