闭包 {#闭包}

闭包主要就是提升函数中变量的作用域,首先要理解作用域

  • 函数作为返回值
  1. function F1() {
  2. var a = 100;
  3. //返回一个函数(函数作为返回值)
  4. return function () {
  5. console.log(a);//自由变量,父作用域中查找
  6. }
  7. }
  8. //f1得到一个函数
  9. var f1 = F1();
  10. var a = 200;
  11. f1();
  • 函数作为参数传递
  1. function F1() {
  2. var a = 100;
  3. return function () {
  4. console.log(a); //自由变量,父作用域中查找
  5. }
  6. }
  7. var f1 = F1();
  8. function F2(fn) {
  9. var a = 200;
  10. fn();
  11. }
  12. F2(f1);
  • 实际开发中闭包的应用,主要作用于封装变量,收敛权限
  1. //闭包实际应用中主要作用于封装变量,收敛权限
  2. function isFirstLoad() {
  3. var _list = [];
  4. return function (id) {
  5. if(_list.indexOf(id) >= 0){
  6. return false;
  7. }else {
  8. _list.push(id);
  9. return true;
  10. }
  11. }
  12. }
  13. // 应用
  14. var firstLoad = isFirstLoad()
  15. firstLoad(10) // true
  16. firstLoad(10) // false;
  17. firstLoad(20) // true

#