1. 程式人生 > 其它 >閉包知識與應用

閉包知識與應用

什麼是閉包?如何製造閉包?

基本概念

 

> 【JS忍者祕籍】閉包允許函式訪問並操作函式外部的變數。   > 【紅寶書】閉包是指有權訪問另外一個函式作用域中的變數的函式。   > 【MDN 】 閉包是指那些能夠訪問自由變數的函式。

 

如何形成閉包:內部的函式存在外部作用域的引用就會導致閉包

利用閉包製造惰性函式

惰性函式:函數語言程式設計的一個重要概念。可以有效提高程式的執行效率。

表示函式執行的分支只會在函式第一次呼叫的時候執行,在第一次呼叫過程中,該函式會被覆蓋為另一個按照合適方式執行的函式,這樣任何對原函式的呼叫就不用再經過執行的分支了。

偏應用函式與柯里化

立即執行函式

1.建立臨時獨立作用域

假設想建立一個累加器這樣的功能,需要一個臨時變數用於儲存累加狀態。放在全域性作用域顯然不太優雅,最簡單的方法就是建立一個IIFE然後建立變數,返回一個函式,然後再函式中完成累加功能。
//一般寫法
var n= 0
setInterval(() => console.log(++n), 1000)
setInterval((function() {
  var n = 0
  return function() {
    console.log(++n)
  }
})(), 1000)
// 1,2,3 
//實現n不可見

2.解決變數名衝突

<script src="https://lib.baomitu.com/jquery/3.6.0/jquery.min.js"></script>
<script>
  //
假設其他庫佔用的$ const $ = () => console.log("Not jQuery"); (function ($) { // 通過閉包還是可以限制作用域的名稱 $(document).ready(function () { console.log("Hello jQuery"); }); })(jQuery); $() </script>

 

 

3.迴圈陷阱

4.使用簡潔變數名