闭包

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

  • 函数作为返回值

function F1() {
  var a = 100;
  //返回一个函数(函数作为返回值)
  return function () {
    console.log(a);//自由变量,父作用域中查找
  }
}
//f1得到一个函数
var f1 = F1();
var a = 200;
f1();
  • 函数作为参数传递

function F1() {
  var a = 100;
  return function () {
    console.log(a);  //自由变量,父作用域中查找
  }
}
var f1 = F1();
function F2(fn) {
  var a = 200;
  fn();
}
F2(f1);
  • 实际开发中闭包的应用,主要作用于封装变量,收敛权限

//闭包实际应用中主要作用于封装变量,收敛权限
function isFirstLoad() {
  var _list = [];
  return function (id) {
    if(_list.indexOf(id) >= 0){
      return false;
    }else {
      _list.push(id);
        return true;  
    }
  }
}

// 应用
var firstLoad = isFirstLoad()
firstLoad(10) // true
firstLoad(10) // false;
firstLoad(20) // true

最后更新于