js中的闭包
对于初学者来说闭包是一个不太好理解的知识点。
那么什么是闭包呢,他有哪些特性又有哪些不好的地方呢
闭包是一种保护机制,为了保护私有作用域中的私有变量不受全局变量的污染
闭包大概的定义:
在js中,函数套函数,子函数使用父函数的参数或变量,并且子函数被外界所引用(没有释放)。此时父函数的参数或变量是不会被浏览器垃圾回收机制所回收,这个时候父级就形成了闭包环境
闭包的特点:
1、函数套函数
2、子函数访问父函数的参数/变量
3、子函数被外界所使用着,不会被释放
function fn(){ let a =10; return function(){ a++; console.log(a); } } let f = fn(); console.dir(f);
闭包的应用场景:
- 存储父函数的参数或者变量
- 保护私有变量不受外界的干扰
闭包选项卡
//用匿名函数包一个函数 const btn = document.getElementsByTagName('button'); const divs = document.getElementsByTagName('div'); for(var i=0;i<btn.length;i++){ (function(j){ //函数套函数 btn[j].onclick = function(){ //子函数被外界使用 //子函数使用父函数的参数 for(var i=0;i<btn.length;i++){ btn[i].className = ''; divs[i].className = ''; } this.className = 'active'; divs[j].className = 'show'; } })(i) }
闭包的缺点:相对于普通函数要消耗内存,使用不当容易造成内存泄漏。所以一般尽量避免使用闭包