闭包的存在,可使我们间接的访问到函数局部变量。
    闭包经典面试题:循环中使用闭包来解决 var定义变量的问题:

    1. for (var i = 1; i <= 5; i++) {
    2. setTimeout(function timer () {
    3. console.log(i);
    4. }, i * 1000);
    5. }
    6. // 结果都打印 5 次 6
    1. // 法一:使用闭包
    2. for (var i = 1; i <= 5; i++) {
    3. ;function(j) {
    4. setTimeout(function timer () {
    5. console.log(j);
    6. }, j * 1000);
    7. }(i);
    8. }
    9. // 法二:setTimeout 第三个参数
    10. for (var i = 1; i <= 5; i++) {
    11. setTimeout(function timer (j) {
    12. console.log(j);
    13. }, i * 1000, i);
    14. }
    15. // 法三:let
    16. for (let i = 1; i <= 5; i++) {
    17. setTimeout(function timer () {
    18. console.log(i);
    19. }, i * 1000);
    20. }
    1. /*
    2. 编写函数 trigger ,实现调用函数,交替打印 1,2
    3. */
    4. function trigger() {
    5. let flag = true
    6. return ()=> {
    7. flag = !flag
    8. retur flag ? 1 : 0
    9. }
    10. }
    11. const result = trigger()
    12. result() // 1
    13. result() // 0
    14. result() // 1