<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body { font-family: "Microsoft YaHei", serif; } body, dl, dd, p, h1, h2, h3, h4, h5, h6 { margin: 0; } ol, ul, li { margin: 0; padding: 0; list-style: none; } img { border: none } </style> </head> <body> <div id="wrap"> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> </div> <script> // 为了避免全局变量冲突,局部变量被回收。使用闭包 // (function () { // var num = 10-vue-router; // document.onclick = function () { // num++; // alert(num); // } // })(); // 这也是一种闭包 // 在es6中只要作用域套作用域就可以形成闭包 // 这里for的小括号套着大括号 // let aP = document.getElementsByTagName("p"); // // for (let i=0;i<5;i++) { // aP[i].onclick = function () { // alert(i+1) // } // } // 这里var就不可以 // 因为这里如果用var的话不会产生套着大括号的作用域 // for (var i=0;i<5;i++) { // aP[i].onclick = function () { // alert(i+1) // } // } // let aP = document.getElementsByTagName("p"); // function a(x) { // aP[x].onclick = function () { // alert(++x); // }; // } // for (var i=0;i<5;i++) { // a(i) // } let aP = document.getElementsByTagName("p"); for (var i=0;i<5;i++) { (function () { aP[x].onclick = function () { alert(++x); }; })(i); } // 函数自执行不代表闭包 // 只有调用了父级的变量才叫闭包 </script> </body> </html>