【js】闭包
定义普通函数 A
在 A 中定义普通函数 B
在 A 中返回 B
执行 A,并把 A 的返回结果赋值给变量 C
执行 C
function A() {
function B() {
console.log('Hello');
}
return B;
}
var C = A();
C();
eg1:循环中执行异步,拿到的 i 是循环后的值 , 使用闭包解决;
//简单的tag
<div class="parents"> <div class='tab'> <ul> <li><button>1</button></li> <li><button>2</button></li> <li><button>3</button></li> </ul> </div> <div id="div1" class="showdiv">111</div> <div id="div2" class="showdiv">222</div> <div id="div3" class="showdiv">333</div> </div> <script> var btn = document.querySelectorAll('button'); var odiv = document.querySelectorAll('.showdiv'); for (var i = 0; i < btn.length; i++) { // (function (e) { //这个是function里e,即function的形参,也可以换成j,换成什么变量名都无所谓 // btn[e].onclick = function () { // hidediv(); // odiv[e].style.display = 'block'; // } // })(i);//这是循环中的 i ,被作为参数传入, i 的当前值储存在当前立即执行匿名函数中 myclick(i); } function myclick(e) { btn[e].onclick = function () { hidediv(); odiv[e].style.display = 'block'; } } function hidediv() { for (var j = 0; j < btn.length; j++) { odiv[j].style.display = 'none'; } } </script>