zoukankan      html  css  js  c++  java
  • 自己理解的闭包

    //闭包:
    //1:通常理解,函数里面定义一个函数来访问外部函数的变量实现闭包
    //2:变量不会被垃圾回收机制收回,可以保存在变量中(尽量少用,会存放在内存中)
    //3:闭包是将函数内部和函数外部连接起来的桥梁。
    //注意:
    //4:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
    //5:闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。


    console.log('一');
    (function () {
    var count = 1;
    console.log(count);
    }());
    //普通函数,函数调用完立即释放变量a
    function print() {
    var a=1;
    console.log(a);
    }
    print(); //1
    print(); //1


    console.log('二');
    //闭包
    function prints() {
    var b = 0;
    function col() {
    return b += 1;
    }
    return col;
    }
    var c = prints(); //用来创建闭包
    c(); // 1
    c(); // 2

    console.log('三');
    var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
    })();

    console.log('四');
    //方法一
    function add() {
    var counter = 0;
    return function () {
    return counter += 1;
    }
    }
    var b = add();
    console.log(b()); //1
    console.log(b()); //2

    //方法二
    var add = (function () {
    var counter = 0;
    return function () {
    return counter += 1;
    }
    })();

    console.log(add()); //1
    console.log(add()); //2


    console.log('五');
    function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){
    alert(n);
    }
    return f2;
    }
    var result=f1();
    result(); // 999
    nAdd(); //nAdd首先在nAdd前面没有使用var关键字,
    // 因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),
    // 而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。(可以用来理解对象中的函数,很相似)
    //闭包常常会和匿名函数一起使用,但他们之间并没有密不可分的关系。
    result(); // 1000
  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/huancheng/p/8805938.html
Copyright © 2011-2022 走看看