1. 如何產生閉包? -- 當一個嵌套的內部(子)函數引用了嵌套的外部(父)函數的變數(函數)時,就產生了閉包 2. 閉包到底是什麼? -- 使用chrome調試查看 -- 理解一: 閉包是嵌套的內部函數(絕大部分人) -- 理解二: 包含被引用變數(函數)的對像(極少數人) -- 注意: 閉包存在於嵌套的內部函數中 3. 產生閉包的條件? -- 函數嵌套 -- 內部函數引用了外部函數的數據(變數 / 函數) -- 執行外部函數
<script type="text/javascript"> function fn1() { var a = 2; function fn2() { // 執行函數定義就會產生閉包,不用調用內務函數 console.log(a); } fn2(); } fn1(); </script>
1. 將函數作為另一個函數的返回值 2. 將函數作為實參傳遞給另一個函數調用
<script type="text/javascript"> // 1. 將函數作為另一個函數的返回值 function fn1() { let a = 2; function fn2() { a++; console.log(a); } return fn2; } let f = fn1(); // 調用f()是調用內部函數 f(); // 3 f(); // 4 // 如何確定閉包函數執行幾個? // --> 看外部函數執行幾次,因為在執行外部函數的時候才會去創建內部函數的對象 // 和內部函數執行幾次沒關係 // 2. 將函數作為實參傳遞給另一個函數調用 function showDelay(msg, time) { setTimeout(() => alert(msg), time); } showDelay('瞳耀', 1500); </script>
文章標籤
全站熱搜
留言列表