zoukankan      html  css  js  c++  java
  • 闭包

    // 定时器是异步编程:每一轮循环设置定时器,无需等定时器触发执行,继续下一轮循环(定时器触发的时候,循环已经结束了)
      for (var i = 0; i < 10; i++) {
        setTimeout(() => {
          console.log(i);
        }, 1000);
      }

    // => let 存在块级作用域,每次循环都会在当前块作用域中形成一个私有变量i
    // => 当定时器执行的时候,所使用的 i 就是所处块作用域中的 i
      for (let i = 0; i < 10; i++) {
        setTimeout(() => {
          console.log(i);
        }, 1000);
      }

    // => 1、闭包解决
      for (var i = 0; i < 10; i++) {
        ~function (i) {
          setTimeout(() => {
            console.log(i);
          }, 1000);
        }(i);
      }

    // => 2、闭包解决
      for (var i = 0; i < 10; i++) {
        setTimeout(((i) => {
          return () => {
            console.log(i);
          }
        })(i), 1000);
      }
      for (var i = 0; i < 10; i++) {
        setTimeout((i => () => console.log(i))(i), 1000);
      }

    // => 3、基于 bind 的预先处理机制:在循环的时候就把每次执行函数需要输出的结果,预先传递给函数即可
      var fn = function (i) {
        console.log(i)
      }
      for (var i = 0; i < 10; i++) {
        setTimeout(fn.bind(null, i), 1000);
      }
  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/HYTing/p/12621307.html
Copyright © 2011-2022 走看看