js 闭包
能读取其他函数内部变量的函数====即定义在函数内部的函数
作用:
1:能读取函数能不的变量
2:让这些变量的值永远在内存中
例子:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <div> <ul> <li id="a1">aa</li> <li id="a2">aa</li> <li id="a3">aa</li> </ul> </div> </body> <script type="text/javascript"> function addEvent() { for (var i = 1; i < 4; i++) { var id = document.getElementById("a" + i); id.onclick = function () { alert(i); }; } } addEvent(); </script> </html>
由于 for循环是立即执行,onclick 不是立即执行,所有最后无论点击那个 li 输出都是4;
function addEvent() { for (var i = 1; i < 4; i++) { var id = document.getElementById("a" + i); id.onclick = (function (i) { alert(i); })(i); } }
立即执行,输出1,2,3,点击之后没有反应
function addEvent() { for (var i = 1; i < 4; i++) { var id = document.getElementById("a" + i); id.onclick = (function (i) { return function () { alert(i); } })(i); } }
点击之后输出对应的 id