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

原文地址:https://www.cnblogs.com/-cherish/p/6679032.html