閉包知識與應用
阿新 • • 發佈:2022-03-31
什麼是閉包?如何製造閉包?
基本概念> 【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.使用簡潔變數名