美文网首页
js--闭包

js--闭包

作者: 栗子酥小小 | 来源:发表于2017-03-22 00:51 被阅读0次
  • 当在函数内部定义了其他函数时,就创建了闭包。

  • 在后台执行环境中,闭包的作用域链包含着它自己的作用域、外部函数的作用域和全局作用域。

  • 通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。

  • 所以,创建并立即调用一个函数,既可以执行其中的代码,又不会在内存中留下对该函数的引用。

  • 但是,当函数返回一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。

  • 每个函数在被调用时都会自动取得两个特殊变量:this和arguments,内部函数在搜索这两个变量时,只会搜索到自己的活动对象为止,因此永远不可能直接访问外部函数的这两个变量,所以在闭包函数里的this,指向的是window对象。

  • 例如:
    var name = "The Window";

     var object = {
         name : "My Object",
     
         getNameFunc : function(){
             return function(){
                 return this.name;
             };
         }
     };
     
     alert(object.getNameFunc()());  //"The Window"
    
  • 清理内存:

  •      function assign(){
             var element = document.getElementById("xxx");
             var id = element.id;
             element.onclick = function(){
                 alert(id);
                 // alert(element.id);
             }
             element = null;
             }
    
  • 解析:DOM对象往往占据较大的内存,当在闭包函数内直接访问element.id时,element具有两个引用数,引用数大于0就无法被垃圾回收。

  • 改进:用id = element.id来取得需要的值,而避免在闭包内对element的整个引用,但此时element依然在外部函数的作用域中被引用,引用数为1依旧大于0,所以为了使element所指对象的引用数0,在使用完后要将element的引用指向null,这样之前被element引用的对象就可以被垃圾回收了。

相关文章

  • js--闭包

    当在函数内部定义了其他函数时,就创建了闭包。 在后台执行环境中,闭包的作用域链包含着它自己的作用域、外部函数的作用...

  • JS--闭包(一)

    闭包:是指有权访问另一个函数作用域中的变量的函数。 创建闭包的常见方式,是在一个函数内部创建另外一个函数: 如上,...

  • JS--闭包(二)

    这里我们根据之前介绍的闭包延伸一下其他的知识点。 在闭包中,其保存的是整个变量对象。闭包只能取得包含函数中任何变量...

  • 再学JS--闭包

    MDN对闭包的定义: 闭包是指那些能够访问自由变量的函数 那什么是自由变量? 自由变量是指在函数中使用的,但既不是...

  • js--闭包概念详解

    关于闭包,简而言之,每个函数都是一个闭包,闭包就是一个私有的空间。函数里面定义的变量和方法等都在这个私有空间中,外...

  • JS--闭包、定时器

    什么是闭包? 有什么作用? 闭包是指有权限访问另一个函数作用域的变量的函数(就是能够读取其他函数内部变量的函数)。...

  • JS--作用域和闭包

    作用域 1、全局作用域2、函数作用域3、块级作用域(ES6新增)if(true){let x = 100}cons...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

网友评论

      本文标题:js--闭包

      本文链接:https://www.haomeiwen.com/subject/czunnttx.html