闭包

闭包有三个特性:

1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量

使用闭包有一个优点,也是它的缺点,就是可以把局部变量驻留在内存中,可以避免使用全局变量。全局变量在每个模块都可调用,这势必将是灾难性的。

1.举个简单例子

    var abc = (function () { //abc为外部匿名函数的返回值
        var a = 1;
        return function () {
            a++;
            alert(a);
        }
    })();
    abc();
    abc();
    abc();

2.闭包实际运用

    //普通实现
    //window.onload = function () {
    //    var ali = document.getElementsByTagName("li");
    //    for (var i = 0; i < ali.length; i++)
    //    {
    //        ali[i].onclick = function () {
    //            alert(this.innerHTML);
    //        };
    //    }
    //};

    //闭包实现
    window.onload = function () {
        var ali = document.getElementsByTagName("li");
        for (var i = 0; i < ali.length; i++) {
            (function (i) {
                ali[i].onclick = function () {
                    alert(this.innerHTML)
                };
            })(i);
        }
    };

3.使用闭包实现封装

    var Person = function () {
        var name = "default";
        return {
            getName: function () {
                return name;
            },
            setName: function (newName)
            {
                name = newName;
            }
        };
    };
    var p1 = new Person();
    console.info(p1.getName());
    p1.setName("newName");
    console.info(p1.getName());
原文地址:https://www.cnblogs.com/liandy0906/p/6209176.html