首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JavaScript 学习札记七 闭包二

2012-06-30 
JavaScript 学习笔记七 闭包二?//获取内部变量的值f2为闭包function f1(){var n 999function f2(){retu

JavaScript 学习笔记七 闭包二

?

//获取内部变量的值  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());//defaultjson.setName("json"); alert(json.getName());//json
//闭包问题 内存泄露//JavaScript 的解释器都具备垃圾回收机制,一般采用的是引用计数的形式,如果一个//对象的引用计数为零,则垃圾回收机制会将其回收,这个过程是自动的。//在闭包中,因为局部的变量可能在将来的某些时刻//需要被使用,因此垃圾回收机制不会处理这些被外部引用到的局部变量,而如果出现循环引//用,即对象 A 引用 B,B 引用 C,而 C 又引用到 A,这样的情况使得垃圾回收机制得出其//引用计数不为零的结论,从而造成内存泄漏

热点排行