1. 程式人生 > >從一個小例子再次理解閉包

從一個小例子再次理解閉包

  function fun () {
      var i = 0
      return function () {
          console.log(i++)
      }
  }
  var f1 = fun(),
      f2 = fun();
  console.log(f1);  // 因為f1 = fun() 執行 所以f1 f2 都等於 fun return 出的函式 function () {console.log(i++)}
  console.log(f2);
  f1();  // 0   f1() 是執行 f1這個函式 i++先執行在相加所以i=0
  f1();  // 1   在此執行的時候i = 1
f2(); // 0 f2 為 0 的原因是 因為 f2 和 f1 是 fun 是例項化的兩個物件

我產深的疑惑在f2()的位置,因為一開是我認為f2()輸出的應該是2 因為按照閉包的思路,i會一直增加。但是我沒有注意到var f1 = fun(),f2 = fun(); f1 f2是fun()例項的兩個物件,他們並不會互相干擾。