`
西门吹牛
  • 浏览: 227242 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

闭包学习之我的理解

阅读更多
学习资料
http://abruzzi.iteye.com/blog/658473

<html>

<head>

<title></title>

</head>

<body>
<div>demo</div>
<button id="xxxt" onclick="xx()">toggle</button>
</body>

</html>
<script language="javascript" type="text/javascript">
/**
如下例,内部函数引用外部函数的变量(这里是变量i)
该内部函数即形成闭包,"闭"是指内部函数中的变量对于外部不可见(而内部函数可以引用外部变量)
思考:照此理解,我们应该经常在不知不觉中使用着闭包,只要我们在客户端环境下定义一个函数,而
该函数引用了全局变量,那么这不就是一个闭包?因为该函数和全局变量是属于windows这个顶级对象的
*/
var arr=[];
var def=function (){
    
    for(i=0;i<3;i++){
        arr.push({
           'id':i,
           'getIndex':function (){
                return ("第"+i+"个元素");
           }
        });
        
    }
    

}
def();


/*
注意运行结果,闭包里变量的值并不是创建时的值,而是外部函数中该变量最后的值
(只是创建了一个' return ("第"+i+"个元素"); '的函数体)
*/
alert(arr[0].id+":"+arr[0].getIndex());//0:第3个元素
alert(arr[1].id+":"+arr[1].getIndex());//1:第3个元素
alert(arr[2].id+":"+arr[2].getIndex());//2:第3个元素

/**
闭包的用途
1 减少全局变量,避免污染
2 记忆数据状态
*/

var counter=(function (){
    var cache={};//使用闭包和匿名自执行函数,将该变量封装起来,减少全局变量污染,而且"记忆"内部函数函数的运算结果
    return {
        'count':function (n){
            if(cache.n&&cache.n==n){
                alert('取得是缓存值');
                return cache['result'];
            }else{
                var v= n*n;
                cache.n=n;
                cache.result=v;
                return v;
            }
            
        }
    };

})();
分享到:
评论

相关推荐

    JS 闭包的理解

    9. **学习资源**:除了上述的博客链接,还可以参考MDN(Mozilla Developer Network)和其他权威的JavaScript教程,深入了解闭包及其在实际开发中的应用。 总之,JavaScript闭包是理解和编写高效、模块化代码的关键...

    Swift之闭包ClosureDemo

    Swift中的闭包是一种强大的编程概念,它允许我们定义一段可移动和可重用的代码块,可以在函数中作为参数传递,...通过实践和学习"Swift之闭包ClosureDemo",你将能够更好地掌握这一关键概念,并将其应用到实际项目中。

    js闭包学习

    总之,JavaScript的闭包是一种核心概念,理解和掌握闭包对于深入学习JavaScript以及使用jQuery等库进行前端开发至关重要。通过闭包,开发者可以实现更灵活和高效的设计模式,提高代码质量与可维护性。

    Swift闭包学习

    Swift闭包是编程语言中的一个核心特性,尤其在iOS应用开发中扮演着至关重要的角色。闭包(Closure)可以理解为一段能够捕获并存储其所在上下文中变量的代码块...通过不断实践和学习,你将能更好地理解和运用这一特性。

    js闭包写法学习demo

    总之,JavaScript中的闭包是一个强大而灵活的概念,它提供了对作用域、变量持久化和封装的强大支持,是理解JavaScript核心机制的关键部分。在日常开发中,熟练掌握闭包的使用将有助于编写更高效、更易于维护的代码。

    关系闭包的计算

    本实验旨在通过编程实践的方式帮助学习者深入理解关系闭包的概念,并熟练掌握Warshall算法用于计算关系的自反闭包、对称闭包以及传递闭包。 #### 关键概念解释 1. **自反闭包**:给定集合A上的关系R,如果对于集合...

    最符合菜鸟的闭包

    对于初学者来说,它可能显得有些抽象,但理解闭包对于提升编程技能至关重要。闭包是一种特殊的作用域,它允许函数访问并操作其外部作用域的变量,即使在外部函数执行完毕后仍然可以访问这些变量。 闭包的核心在于它...

    跟我学习javascript的闭包

    陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQuery基础教程 的附录,发现附录A对JavaScript的闭包的介绍简单易懂,于是...

    用矩阵求自反闭包自反闭包

    因此,深入理解自反闭包的概念和矩阵表示法对于学习这些领域的知识是十分必要的。 综上所述,用矩阵求自反闭包是一种有效且直观的方法,它将抽象的关系理论与具体的数学运算相结合,帮助我们更好地理解和处理关系...

    [深入理解JS闭包]帮助你快速学习js的闭包,简单高效的文档资源

    总结,JavaScript 闭包是理解和掌握 JavaScript 高级编程的关键之一。它提供了访问和操作外部作用域的能力,有助于实现模块化、封装和持久化变量等功能。然而,使用不当也可能带来内存问题,因此在使用闭包时需谨慎...

    山东大学三元闭包实验

    通过阅读和理解这段代码,学习者可以更好地掌握R语言的编程技巧以及如何应用三元闭包理论解决实际问题。 此外,此实验对于提升逻辑思维能力、理解抽象概念以及熟练运用编程解决复杂问题的能力都有很大的帮助。通过...

    JavaScript闭包深入理解.pdf

    首先,我们来理解闭包的定义。官方解释可能较为抽象,但简单来说,JavaScript中的每个函数都可以视为一个闭包,尤其是当一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量时,就形成了一个强大的闭包...

    离散实验报告求有限集上给定关系的自反、对称和传递闭包

    在离散数学实验报告中,我们将学习如何求有限集上给定关系的自反、对称和传递闭包。这些概念是离散数学的重要组成部分,对于理解关系闭包的性质和应用具有重要意义。 自反闭包是指关系矩阵中的主对角线全部置为1,...

    javascript闭包详解

    ### JavaScript闭包详解 #### 一、什么是闭包? 闭包是JavaScript中一个重要的概念,它涉及函数如何访问外部作用域中的变量。虽然官方定义较为复杂:“闭包是...理解和掌握闭包对于深入学习JavaScript编程至关重要。

    离散数学的各种闭包运算

    理解并熟练掌握离散数学中的闭包运算及其算法,对于深入学习计算机科学,尤其是理论部分至关重要。通过编程实现这些概念,可以帮助我们更好地理解和运用它们,同时也能提高问题解决能力。在实践中,不断练习和应用...

    深入理解javascript原型和闭包.pdf

    JavaScript原型和闭包是这门语言中两个比较难以理解且与其他面向对象语言区别较大的概念。...无论是原型链和作用域链的理解,还是函数作为一等对象的灵活使用,都是深入学习和应用JavaScript不可或缺的部分。

    离散数学编程之用C++编写的求对称闭包程序

    本文将深入探讨对称闭包的概念,并通过C++编程实现来帮助理解。 对称闭包指的是一个关系R在其自身的对称操作下所形成的最小关系,即对于关系R中的任意元素a和b,如果存在b到a的路径,那么也存在a到b的路径。在集合...

    Swift视频教程 基础语法系列 闭包单行间接返回

    Swift是一种由Apple开发的编程语言,它被广泛用于iOS、macOS、watchOS...在学习过程中,通过观看“Swift视频教程 基础语法系列 闭包单行间接返回”,你将对这一核心概念有更深入的理解,从而更好地应用在实际项目中。

    求属性集的属性闭包

    ### 求属性集的属性闭包 在数据库理论中,**属性闭包**是一个重要的概念,尤其是在规范化处理和查询优化方面。...通过上述代码,我们可以看到一个简单的求解属性闭包的程序实现,这对于学习数据库原理非常有用。

Global site tag (gtag.js) - Google Analytics