zoukankan      html  css  js  c++  java
  • 闭包

    闭包有三个特性:

    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());
  • 相关阅读:
    几种数据结构的查找、删除、插入的时间复杂度(数组 链表 二叉查找树 平衡二叉查找树 哈希表)
    java 多线程的状态迁移 常用线程方法分析
    JVM内存分区
    详解 Java I/O 与装饰者模式
    详解 java 异常
    ExecutorService 线程池详解
    CG group
    VIM 配置python
    Q35+uefi or bios+legacy // PCI | PCIE
    硬盘接口协议
  • 原文地址:https://www.cnblogs.com/liandy0906/p/6209176.html
Copyright © 2011-2022 走看看