1.閉包函數是指有權訪問另一個函數作用域中的變量的函數
2.創建閉包函數最常見的方式是在一個函數內創建另一個函數,通過另一個函數訪問這個函數的局部變量
3.閉包的特點:1函數嵌套函數,
2 函數內部可以引用外部的參數和變量
3 參數和變量不會被垃圾回收機制回收
4.閉包的優點:1 希望一個變量長期駐扎在內存中 *
2 避免全局變量的污染 *
3 私有變量存在
5.閉包的實現 1:函數嵌套函數 *
2 外層函數返回內層函數 *
3 外面有一全局變量接受外層函數
function fun1() { var sum=0; function fun2() { sum++; return sum } return fun2 } var s=fun1(); console.log(s());
// 自執行函數 的閉包 // var fun3=function () { var a=3; return{ b:7, sum:function () { return this.b+a; } } }(); console.log(fun3.sum());
/* * 把函數名當參數調用 * 回調函數 * * */ function b() { console.log("b"); } function c() { console.log("c"); } function d(fun) { fun(); } d(b); d(c);
// 循環 var num=0; function a1(fun) { fun(a1); } function a2(fun) { num++; console.log(num); if(num>10) return; fun(a2); } a1(a2);
// 事件函數 也是 回調函數 this.addEventListener("click",clickHandler); function clickHandler(e) { } setInterval(animation,16); function animation() { }
返回閉包時牢記一點:返回函數不要引用任何循環變量,或者后續會發生變化的變量!