js閉包的定義與應用


 

  • 定義

  閉包是在另一個函數(稱為父函數)中定義的函數,並且可以訪問在父函數作用域中聲明和定義的變量。

  閉包可以訪問三個作用域中的變量

  1、在自己作用域中聲明的變量

  2、在父函數中聲明的變量

  3、在全局作用域中聲明的變量

  
  var globalVar = "abc";
  //自調用的函數
  (function fatherFunction(fatPart){ //父函數fatherFunction作用域開始
    var fatVar = 'F'; //在父函數中聲明的變量
    //自調用函數

    (function childrenFunction(chiPart){ //子函數children作用域開始
      var chiVar = 'C'; //在子函數中聲明的變量
      console.log(
      "父函數參數:" + fatPart +
      "父函數中聲明:" + fatVar +
      "子函數參數:" + chiPart +
      "子函數聲明:" + "chiVar" +
      "全局聲明:" + global;
      )
    })(5) //子函數作用域結束,將5作為參數
  })(7) //父函數作用域結束,將7作為參數


  //父函數參數:7
  //父函數中聲明:F
  //子函數參數:5
  //子函數中聲明:C
  //全局聲明:abc

   childrenFunction 是在 fatherFunction 中定義的閉包,可以訪問在 fatherFunction 作用域內聲明和定義的變量。此外,閉包還可以訪問在全局命名空間中聲明的變量。

  • 應用

  編寫一個可以實現如下操作的函數

  
  var biBao = F(6);
  biBao(10); //返回16
  biBao(20); //返回26

  可以創建一個閉包來存放傳遞給函數 F 的值。被返回的內部函數是在外部函數中創建的,內部函數就成了一個閉包,它可以訪問外部函數中的變量。本例中變量 (父函數作用域中的變量) 是 number

  
  function F(number){
    return function(a){
      console.log(number + a);
    }
  }
  
  var biBao = F(6);
  biBao(10); //16
  biBao(20); //26

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM