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>
創作者介紹
創作者 bingzhichen 的頭像
bingzhichen

空境界

bingzhichen 發表在 痞客邦 留言(0) 人氣()