• 全面理解Javascript闭包和闭包的几种写法及用途


    var Circle={
    "PI":3.14159,
    "area":function(r){
    return this.PI * r * r;
    }
    };
    alert( Circle.area(1.0) );

    匿名自执行函数
    var data= {
    table : [],
    tree : {}
    };

    (function(dm){
    for(var i = 0; i < dm.table.rows; i++){
    var row = dm.table.rows[i];
    for(var j = 0; j < row.cells; i++){
    drawCell(i, j);
    }
    }

    })(data);

    结果缓存[闭包正是可以做到这一点,因为它不会释放外部的引用,从而函数内部的值可以得以保留。]
    var CachedSearchBox = (function(){
    var cache = {},
    count = [];
    return {
    attachSearchBox : function(dsid){
    if(dsid in cache){//如果结果在缓存中
    return cache[dsid];//直接返回缓存中的对象
    }
    var fsb = new uikit.webctrl.SearchBox(dsid);//新建
    cache[dsid] = fsb;//更新缓存
    if(count.length > 100){//保正缓存的大小<=100
    delete cache[count.shift()];
    }
    return fsb;
    },

    clearSearchBox : function(dsid){
    if(dsid in cache){
    cache[dsid].clearSelection();
    }
    }
    };
    })();

    CachedSearchBox.attachSearchBox("input");
    3、封装
    var person = function(){
    //变量作用域为函数内部,外部无法访问
    var name = "default";

    return {
    getName : function(){
    return name;
    },
    setName : function(newName){
    name = newName;
    }
    }
    }();

    print(person.name);//直接访问,结果为undefined
    print(person.getName());
    person.setName("abruzzi");
    print(person.getName());
    4、实现类和继承
    function Person(){
    var name = "default";

    return {
    getName : function(){
    return name;
    },
    setName : function(newName){
    name = newName;
    }
    }
    };

    var p = new Person();
    p.setName("Tom");
    alert(p.getName());

    var Jack = function(){};
    //继承自Person
    Jack.prototype = new Person();
    //添加私有方法
    Jack.prototype.Say = function(){
    alert("Hello,my name is Jack");
    };
    var j = new Jack();
    j.setName("Jack");
    j.Say();
    alert(j.getName());

    来源:http://www.cnblogs.com/yunfeifei/p/4019504.html

  • 相关阅读:
    golang学习 ---并发获取多个URL
    MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf)
    Python ElasticSearch API
    linux 输出重定向 何时会写文件
    Linux top命令的用法详细详解
    mysql 5.7.13 安装配置方法(linux)-后期部分运维
    linux下各目录的作用
    MySQL 获得当前日期时间 函数
    mysql导入大批量数据出现MySQL server has gone away的解决方法
    python之MySQL学习——防止SQL注入
  • 原文地址:https://www.cnblogs.com/jayruan/p/5095533.html
Copyright © 2020-2023  润新知