`

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  
最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

相关推荐

    javascript学习笔记整理知识点整理

    这份“javascript学习笔记整理知识点整理”是针对初学者的一份宝贵资料,涵盖了JavaScript的基础知识,旨在帮助新手快速入门并掌握这门语言的核心概念。 一、变量与数据类型 在JavaScript中,变量用于存储数据。...

    JavaScript学习笔记

    JavaScript是一种广泛应用于网页和网络应用的脚本语言,它在浏览器端...通过阅读"JavaScript从入门到精通学习笔记.docx"文档和解压"Chapter2.rar",你将深入探索以上各个知识点,逐步成为一名熟练的JavaScript开发者。

    js 笔记 javascript 学习笔记

    本学习笔记将深入探讨JavaScript的核心概念,包括变量、数据类型、操作符、控制流程、函数、对象、数组、原型链、闭包等,并结合实际示例,如my.js、order.js、login.js等文件,来讲解其在实际项目中的应用。...

    javascript入门学习笔记

    这份"javascript入门学习笔记"旨在为初学者提供一个全面且深入的JavaScript学习路径。 一、基础语法 JavaScript的基础包括变量、数据类型、操作符、流程控制等。变量用于存储数据,数据类型分为基本类型(如字符串...

    Javascript学习笔记(传智播客视频学习笔记+代码)

    "Javascript学习笔记(传智播客视频学习笔记+代码)"是一份全面介绍JavaScript基础知识的学习资源,适用于初学者。这份笔记结合了传智播客的web前端培训视频内容,提供了丰富的理论讲解和实践代码,帮助读者从零开始...

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

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现

    javaScript学习笔记.rar

    这个“javaScript学习笔记.rar”压缩包显然包含了作者在学习JavaScript过程中的心得和记录,对于初学者或者想要深入理解JavaScript的人来说,是一份宝贵的资源。 JavaScript与Java虽然名字相似,但两者实际上是不同...

    JavaScript 学习笔记集和代码库

    压缩包中的“JavaScript学习笔记集”可能包含了语言的基本概念、语法特性、面向对象编程、闭包、原型链、作用域、异步编程等内容的详细解释。而“代码库”可能包含了大量的示例代码,涵盖各种常见任务,如表单验证、...

    JavaScript学习笔记讲解

    这只是JavaScript学习笔记的一小部分,JavaScript还有更多高级特性和概念,如对象、数组、函数、类、模块、闭包等,以及DOM操作、事件处理、Ajax异步请求等内容,需要进一步深入学习和实践才能掌握。

    JavaScript学习笔记-适合初学者

    本学习笔记专为初学者设计,旨在帮助新接触JavaScript的人快速掌握这门语言的核心概念和实用技巧。 首先,"JavaScript特效.chm"可能是一份关于JavaScript实现的各种网页特效的教程。这些特效可能包括图片轮播、下拉...

    Javascript学习笔记___自学实用

    JavaScript学习笔记——深入理解基础与函数 在JavaScript中,学习基础知识是至关重要的,因为它是所有进一步编程技巧的基础。首先,我们需要了解JavaScript中的数据类型。在JavaScript中,有五种简单的数据类型:...

    JavaScript 入门 新手学习笔记

    这篇"JavaScript入门新手学习笔记"提供了全面的学习资源,适合初学者系统性地掌握这一技术。 笔记可能包含了以下关键知识点: 1. **基础语法**:JS的基础包括变量(var、let、const)、数据类型(如字符串、数字、...

    JavaScript基础学习笔记

    JavaScript 基础学习笔记 本资源摘要信息基于黑马视频记录的学习笔记,涵盖了 JavaScript 基础知识点,包括 HTML、CSS、JavaScript、DOM、事件处理等内容。 HTML 和 CSS 基础 * HTML 结构:head、body、title、...

    JavaScript学习笔记 概括了所有的javaScript语法 用法

    本学习笔记全面涵盖了JavaScript的语法和用法,旨在帮助初学者快速掌握并深入理解这门语言。 一、基础语法 JavaScript的基础包括变量、数据类型、操作符和流程控制。变量在JavaScript中使用`let`、`const`和`var`...

    JavaScript 学习笔记

    这份“JavaScript学习笔记”涵盖了JavaScript的基础、进阶以及与HTML、CSS和DOM的协同工作等内容,适合初学者进行自我学习。 **JavaScript基础** JavaScript的基础包括变量、数据类型、操作符、流程控制(条件语句...

    我的JavaScript学习笔记

    这篇学习笔记将带你深入了解JavaScript的基础和一些进阶应用。 首先,我们从"Js基本语法"开始。JavaScript是一种弱类型、解释型的脚本语言,它支持变量声明(var、let、const)、数据类型(包括基本类型:字符串、...

    JavaScript学习笔记,markdown格式以及PDF格式

    《JavaScript学习笔记》包含了JavaScript的基础语法部分,以markdown和PDF两种格式提供,方便不同需求的学习者查阅和打印。Markdown格式易于阅读和编辑,而PDF格式则更适合离线阅读和保存。 在"JavaScript基础语法....

    javascript高级编程(学习笔记 包括 1 , 2 版)

    JavaScript 高级编程的学习笔记涵盖了ECMAScript中的基础概念,特别是关于变量、数据类型和运算符的使用。在ECMAScript中,变量可以存储两种基本类型的值:原始值(Primitive Values)和引用值(Reference Values)...

Global site tag (gtag.js) - Google Analytics