JavaScript 学习笔记七 闭包二

本文深入探讨JavaScript中的闭包概念,包括闭包的基本定义、如何创建闭包,以及闭包在实际编程中的应用案例,如UI初始化、缓存数据、封装数据等。通过这些实例帮助读者更好地理解闭包的作用及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

//获取内部变量的值  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值