`

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());//default
json.setName("json"); alert(json.getName());//json
分享到:
评论
2 楼 sblig 2012-04-28  
//闭包问题  内存泄露
//JavaScript 的解释器都具备垃圾回收机制,一般采用的是引用计数的形式,如果一个
//对象的引用计数为零,则垃圾回收机制会将其回收,这个过程是自动的。

//在闭包中,因为局部的变量可能在将来的某些时刻
//需要被使用,因此垃圾回收机制不会处理这些被外部引用到的局部变量,而如果出现循环引
//用,即对象 A 引用 B,B 引用 C,而 C 又引用到 A,这样的情况使得垃圾回收机制得出其
//引用计数不为零的结论,从而造成内存泄漏

1 楼 sblig 2012-04-28  
最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

相关推荐

    JS学习笔记之闭包小案例分析

    主要介绍了JS学习笔记之闭包,结合具体案例形式分析了javascript实现与使用闭包的相关操作技巧,需要的朋友可以参考下

    JavaScript函数、闭包、原型、面向对象学习笔记

    给大家分享了一篇关于JavaScript函数、闭包、原型、面向对象的知识点学习笔记内容,有兴趣的朋友参考下。

    JavaScript-学习笔记.docx

    自己学习笔记。视频:腾讯课堂:渡一教育 内容大纲: 预编译: 函数 闭包问题 对象 原型、原型链、call、apply 继承模式 对象克隆 数组 类数组 数组去重 自定义type方法(类似于typeof) try-catch es5.0严格模式 ...

    JavaScript闭包原理与用法学习笔记

    本文实例讲述了JavaScript闭包原理与用法。分享给大家供大家参考,具体如下: 闭包(Closure) 闭包是一个函数和词法环境的组合,函数声明在这个词法环境中。 词法作用域: 看下面的一个例子: function init() { ...

    Javascript学习笔记之 函数篇(三) : 闭包和引用

    Javascript 中一个最重要的特性就是闭包的使用。因为闭包的使用,当前作用域总可以访问外部的作用域。因为 Javascript 没有块级作用域,只有函数作用域,所以闭包的使用与函数是紧密相关的。 模拟私有变量 代码如下...

    javascript学习笔记(十三) js闭包介绍(转)

    一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 代码如下: var n=999;...

    JavaScript学习笔记之惰性函数示例详解

    本文主要给大家介绍了关于JavaScript惰性函数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意是首次...

    面向对象javascript笔记

    面向对象的 javascript 学习 大家好,根据我的学习经验总结了下面一些javascript面向对象方法的知识,希望对一些接触这方面不多的人有所帮助,有不正确的地方请指正。 学习内容;引用,函数重载和类型检查,作用...

    谈一谈javascript闭包

    下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的...

    Javascript闭包(Closure)详解

    下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处...

    JS页面获取 session 值,作用域和闭包学习笔记

    本文实例讲述了JS页面获取 session 值,作用域和闭包。分享给大家供大家参考,具体如下: Javascript获取session的值: var name= "${sessioScope.变量名}"; 注意这里面需要使用 “” 把 El 表达式给括起来,否则...

    JavaScript中this用法学习笔记

    JavaScript这门语言中,最令人迷惑的地方有三个,闭包、this、原型。针对大多数人,可以利用词法作用域等避开this的坑,但是我们不能一直生活在舒适区,要敢于打破砂锅问到底,对我们来说也是一种提升。 一、一般对...

    JavaScript高级程序设计 读书笔记之八 Function类及闭包

    Function类及闭包,学习js的朋友可以参考下

    javascript 设计模式与开发实践

    3、知识点的归纳总结也比较突出重点,方便二次学习以及做笔记 字体清晰不模糊,看起来舒服。 算法导论 第三版 中文版 清晰 PDF,全书共8部分35章节,内容涵盖基础知识、排序和顺序统计量、数据结构、高级设计和分析...

    JavaScript高级整理

    谷粒学院学习笔记,内容包括 原型与原型链、执行上下文、执行上下文栈、变量提升、函数提升、作用域、作用域链、闭包、对象的多种创建模式、对象的继承模式、JavaScript事件循环机制等。

Global site tag (gtag.js) - Google Analytics