(一)闭包概念
1 闭包是一个函数,而且存在于另一个函数当中
2 闭包可以访问到父级函数的变量,且该变量不会销毁
function person(){ var name = 'zcc'; function getName(){ console.log(name); } return getName; } var per = person();// per的值就是return后的结果,即cat函数 per();// zcc per()就相当于getName() per();// zcc 同上,而且变量name没有销毁,一直存在内存中,供函数getName()调用 per();// zcc
(二)机制
JS规定在一个函数作用域内,程序执行完以后变量就会被销毁,这样可节省内存;
使用闭包时,按照作用域链的特点,闭包(函数)外面的变量不会被销毁,因为函数会一直被调用,所以一直存在,如果闭包使用过多会造成内存销毁。
(三)闭包作用
作用1:隐藏变量,避免全局污染
作用2:可以读取函数内部的变量
同时闭包使用不当,优点就变成了缺点:
缺点1:导致变量不会被垃圾回收机制回收,造成内存消耗
缺点2:不恰当的使用闭包可能会造成内存泄漏的问题
(四)闭包应用
需求 实现number自增
1、通过全局变量,可以实现,但会污染其他程序
2、定义一个局部变量,不污染全局,但是实现不了递增
3、通过闭包,可以是函数内部局部变量递增,不会影响全部变量,完美!!
庸人自扰