1.定义:有权访问另一个函数作用域中的变量的函数。
2.原理:不管在任何位置,只要函数执行了,必然可以拿到定义作用域中的变量。
3.特点:
①占内存;
②低版本浏览器中内存泄漏;
③可以在全局修改局部的数据。
4.作用:
①可以在函数的外部访问到函数内部的局部变量;
②让这些变量始终保存在内存中,不会随着函数的结束而自动销毁。
5.写法:通过作用域的嵌套实现,让局部变量,进化成私有变量的环境
6.应用场景:
①事件委托的封装:
var aBox = document.querySelectorAll("#box"); document.onclick = eveEnt(aBox,function(){}) function eveEnt(child,cb){ return function(eve){ var e = eve || window.event; var tar = e.target || e.srcElement; console.log(tar); for(var i = 0;i<child.length;i++){ if(child[i] === tar){ cb.bind(tar)(); } } } }
②循环中绑定事件,在事件内使用循环每次的计数器:
for (let i = 0; i < ali.length; i++) { ali[i].onclick = function () { console.log(i); } }
③可以给计时器的回调函数传参:
setTimeout(fn("123"),1000) function fn(a){ return function(){ console.log(a); } }
④模块化开发:将功能作为模块操作,每个模块都是独立的,通过专用入口,进行功能的调用
var obj = (function(){ "user strict"; var url1 = "...1"; var url2 = "...2"; var url3 = "...3"; function ajax(){ console.log(url1); } function jsonp(){ console.log(url2); } function cookie(){ console.log(url3); } return { ajax:ajax, jsonp:jsonp, cookie:cookie } })(); obj.ajax(); obj.jsonp(); obj.cookie();