闭包

  • 概念:一个函数可以访问另一个函数中的变量

例子

  (function () {
      v  ar a = 10;
      var b = 20;
      function add(num1, num2) {
          var num1 = !!num1 ? num1 : a;
          var num2 = !!num2 ? num2 : b;
          return num1 + num2;
      }
      window.add = add;
  })();
  add(10, 20);
  for (var i = 1; i <= 5; i++) {
      setTimeout(function timer() {
          console.log(i);
      }, i * 1000);
  }

  for (var i = 1; i <= 5; i++) {
      (function (i) {
          setTimeout(function timer() {
              console.log(i);
          }, i * 1000);
      })(i)
  }
  
  for (var i = 1; i <= 5; i++) {
    setTimeout((function (i) {
      return function () {
        console.log(i);
      }
    })(i), i * 1000);
  }