• 闭包 {#闭包}
  • #

    闭包 {#闭包}

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

    • 函数作为返回值
    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

    #