javascript基础(闭包)

本文通过四个具体的示例介绍了JavaScript中闭包的应用场景,包括获取内部变量值、UI初始化、缓存数据及数据封装对象等,有助于理解闭包概念及其在实际开发中的作用。
//获取内部变量的值  f2为闭包  
function f1(){  
    var n = 999;  
    function f2(){  
        return n;  
    }  
    return f2;  
}  
var result = f1();  
alert(result());  
  
//闭包用途  UI初始化  
var datamodel = {  
    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; j++){  
            drawCell(i,j);  
        }  
    }  
})(datamodel);  
//们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量  
//执行完后很快就会被释放,关键是这种机制不会污染全局对象  
  
//闭包用途  缓存数据  
var CachedSearchBox = (function(){  
    var cache = {};  
    return{  
        attachSearchBox : function(dsid){  
            if (dsid in cache){//如果结果在缓存中  
                alert("获取缓存中的值");  
                return cache[dsid];  
            }  
            alert("新建的值");  
            var fsb = new Array("one","two","11","14","13","11","13","12");//新建  
            cache[dsid] = fsb;//更新缓存  
            return fsb;  
        },  
          
        clearSearchBox : function(dsid){  
            if( dsid in cache){  
                delete cache[dsid];  
            }  
        }  
    };  
})();  
alert(CachedSearchBox.attachSearchBox("input1"));//新建的值  
alert(CachedSearchBox.attachSearchBox("input1"));//获取缓存中的值  
CachedSearchBox.clearSearchBox("input1");//清除  
alert(CachedSearchBox.attachSearchBox("input1"));//新建的值  
alert(CachedSearchBox.attachSearchBox("input1"));//获取缓存中的值
// 闭包用途  数据封装  对象  
function Person(){  
    var names = "default";  
    return {  
        getName : function(){  
            return names;  
        },  
        setName : function(newname){  
            names = newname;  
        }  
    }  
};  
//alert(names); 直接报错 names 未定义  
var json = Person(); alert(json.getName());//default  
json.setName("json"); alert(json.getName());//json  

转载于:https://my.oschina.net/keejun/blog/126855

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值