闭包就是一个函数,两个函数彼此嵌套,内部函数就是闭包,形成闭包条件是内部函数需要通过return给返回出来.
同一个闭包机制可以创建多个闭包函数出来,它们彼此没有联系,都是独立的。并且每个闭包函数可以保存自己个性化的信息。
<script>function f1(num){ function f2(){ console.log("数字:"+(num++)); } return f2();}var fa=f1(200);var fb=f1(50);fa(); //200fa(); //201fa(); //202fb(); //50fb(); //51fb(); //52</script>案例
<script>//生成数组元素var num=new Array();for(var i=0; i<4; ++i) {//num[i]=闭包; //闭包被调用4次,会生成4个独立的函数 num[i]=f1(i);}function f1(n) { function f2(){ console.log(n); } return f2;}num[2](); //2num[1](); //1num[0](); //0num[3](); //3</script>利用闭包,4个li鼠标移入增加背景颜色,移除恢复背景颜色
<body> <h2></h2> <ul> <li>student</li> <li>teacher</li> <li>farmer</li> <li>workman</li> </ul></body><script>var lis = document.getElementsByTagName('li');//给每个li设置mouSEOver和mouseout事件 for(var i=0; i<4; i++){ //利用闭包,创建多个事件函数,他们都是独立的 //并且可以访问到"各自的li元素节点" lis[i].onmouseover = over(i);//闭包 lis[i].onmouseout = out(i);//闭包 } function over(n){ function f2(){ lis[n].style.backgroundColor = "lightgreen"; } return f2; } function out(n){ function f2(){ lis[n].style.backgroundColor = ""; } return f2; }</script>新闻热点
疑难解答