• 闭包的理解


    定义:有权访问另外一个函数作用域中的变量的函数。

    创建闭包的方式:就是在函数内部创建另外一个函数。

    实质:

    内部函数的作用域包含了外部函数的作用域,作用域链本质上是一个指向变量对象的指针列表,它只是引用但不实际包含变量对象。

    闭包的使用情况:

    1.保护函数内的变量安全。外部函数的变量只能被闭包函数访问;(也就是读取函数内部的变量)

    2.在内存中维持一个变量。该变量不会被垃圾回收机制回收。

    闭包的副作用:

    1.闭包与变量:闭包只能取得包含函数中任何变量的最后一个值。

    解决闭包的方法:创建匿名函数,并立即执行该匿名函数,并把结果返回。例如:http://www.cnblogs.com/Darren_code/archive/2012/01/31/questions.html

    http://www.qttc.net/201208154.html

    for( var i=0; i<pAry.length; i++ ) {    
    pAry[i].onclick = function(num) {
           return function(){ alert(i); } (i);
        } 
    换种思路:由于在内层函数里只要出现循环变量的话 都是最终值,所以我们利用匿名函数激发出一个作用域,在进入内层循环之前,有另一变量获得该循环变量的值,这一思想是处理闭包问题的精髓。

    for(var i=0;i<div.length;i++){
      (function(){
           var temp=i;
          div[temp].onclick=function()
          {
              alert(temp);
          }
      })() 

    }

     

    2.关于this对象的使用

    3.内存泄露问题

    4.闭包举例  

    function closure(){
      var num = 0;
      return function(){
        return num++;
      } }
    var a = closure();
    a() // 0
    a() //1

    参考资料:

    http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

    http://wlog.cn/javascript/javascript-closures.html

  • 相关阅读:
    execing process _ golang
    Spawning process _ golang
    environment variables _ golang
    common-line flags _ golang
    command-line arguments _ golang
    line filters _ golang
    writing files _ golang
    Reading files _ golang
    为什么使用do{}while(0)来进行宏定义
    单向链表的反转
  • 原文地址:https://www.cnblogs.com/shamoguying1140/p/2801256.html
Copyright © 2020-2023  润新知