`
kobe学java
  • 浏览: 250233 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

如何使用javascript闭包

 
阅读更多

如何使用javascript闭包
2011-12-15 11:47

闭包的概念:官方的解释是,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 

变量的作用域:全局变量和局部变量

全局变量:函数内部可以直接读取全局变量

            var n=999;
            function f1(){

              alert(n);

           }

            f1(); //999

局部变量:函数外部自然无法读取函数内的局部变量 
    function f1()
    { var n=999;
    }
  alert(n); // error
注意:申明内部变量的时候,一定要写var,否则,它就是一个全局变量 

如何从外部读取局部变量?
   只有在函数的内部再定义一个函数:
function function A()
{
    var n=999;
    function B()
  {
      alert(n); // 999  

 }
}

既然B可以读取A中的局部变量,那么只要把B作为返回值,我们不就可以在A外部读取它的内部变量了吗!
     function A()
     {
    var n=999;
    function B()
     {     

     alert(n);   

   }
    return B;
  }
  var result=A();
  result(); // 999 
此时,B函数就是一个闭包.

闭包的简单概念:
闭包就是能够读取其他函数内部变量的函数。 
             函数内部的函数闭包的两个最大的作用
读取函数内部的变量 
变量的值始终保持在内存中 
function A()
{
    var n=999;
    nAdd=function(){n+=1}
    function B()
           {    

             alert(n); 

         }
    return B;
  }
  var result=A();
  result(); // 999
  nAdd();
  result(); // 1000
注意:函数A中的局部变量n一直保存在内存中,并没有在A调用后被GC回收 .

 闭包的缺陷
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,可能导致内存泄露 
  解决方法是,在退出函数之前,将不使用的局部变量全部删除。
 总结:
JavaScript中的闭包函数,是不接受任何形参的,它的值,从执行环境中来
闭包中的变量是存在内存中的,并不会被GC回收
闭包中的变量对内存的消耗很大,乱用会导致内存泄漏的可能

 

 

分享到:
评论

相关推荐

    尚硅谷——JavaScript闭包

    JavaScript闭包 JavaScript闭包 JavaScript闭包 JavaScript闭包

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。

    Javascript 闭包完整解释

    Javascript 闭包完整解释

    javascript闭包详解中文word版

    资源名称:javascript闭包详解 中文word版   内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...

    javascript 闭包

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

    高效使用JavaScript闭包

    使用闭包时,您在一个封闭范围内定义的数据源可供该范围内创建的函数访问,甚至在已经从逻辑上退出这个封闭范围时也是如此。在函数是一等(first-class)变量的语言中(比如JavaScript),此行为非常重要,因为函数的...

    javaScript闭包技术资料

    javaScript闭包技术资料

    javascript 闭包实例下载

    javascript 闭包实例下载

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    javascript闭包的高级使用方法实例

    介绍了javascript闭包的高级使用方法实例,有需要的朋友可以参考一下

    使用XMLHTTPRequest实现自定义ajax。javascript闭包模式写法。值的学习

    使用XMLHTTPRequest实现自定义ajax。javascript闭包模式写法。值的学习

    javascript闭包详解

    javascript闭包详解 javascript闭包详解 javascript闭包详解

    javascript闭包高级教程

    javascript闭包高级教程,闭包内部实现机制的完美展现,值得研究,比较难。

    【JavaScript源代码】详解JavaScript闭包问题.docx

    详解JavaScript闭包问题  闭包是纯函数式编程语言的传统特性之一。通过将闭包视为核心语言构件的组成部分,JavaScript语言展示了其与函数式编程语言的紧密联系。由于能够简化复杂的操作,闭包在主流JavaScript库...

    JavaScript闭包与活动.pdf

    JavaScript闭包与活动.pdf

    javaScript闭包

    javaScript闭包技术资料。javaScript闭包技术资料。

    JavaScript闭包深入理解.pdf

    JavaScript闭包深入理解.pdf

    理解_JavaScript_闭包

    本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。

    揭开Javascript闭包的真实面目

    对于初学者来说,理解Javascript闭包(closure)还是比较困难的,而撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目,让初学者理解起来更加容易一些。

Global site tag (gtag.js) - Google Analytics