zoukankan      html  css  js  c++  java
  • javascript闭包实例

    闭包:让函数内的变量,可以让外部访问和修改。即从外部读取局部变量

    实例一:

    var person = function () {
        var name = 'zhangsan';
        return {
            getName : function () {
                alert(name);
            },
            
            setName : function (newName) {
                name = newName;
            }
        }
    }();

    使用:

    person.getName();  //结果:name='zhangsan'

    person.setName('wangwu'); //设置属性值

    person.getName();//结果:name='wangwu'  属性值变了

    为什么匿名函数执行完毕,name变量没被回收?

    原因就在于匿名函数是getName和setName的父函数,而getName和setName调用了匿名函数name变量,而getName和setName的存在依赖于匿名函数name变量,表示匿名函数name变量还在用所以不会被回收。 因此匿名函数也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

    实例二

    //每次执行一次c()i加1。关键在于var c=a();c容器将i装载记住了。

    function a(){
    var i=0;
    function b(){
    alert(++i);
    }
    return b;
    }
    var c=a();
    c();
     
     
    实例三

    function a(){
    var i =0;
    function b(){
    var i =0;  //为什么把这句注释掉,执行a()时i是undefined? 答:执行b()函数,函数体i = i+1语句,所以i要先声明在使用。
    i = i+1;
    alert(i);
    }
    return b();
    }

    a();
     
     
     
  • 相关阅读:
    Sony Z1 USB 调试
    消除“Unfortunately, System UI has stopped”的方法
    变动数据模拟cons
    string to integer
    single number
    罗马数字转为阿拉伯数字
    整数逆序
    回文数字
    回文字符串
    count and say
  • 原文地址:https://www.cnblogs.com/chenweichu/p/5664037.html
Copyright © 2011-2022 走看看