闭包

  • 顺序输出1~5

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

    另外集中方式

    1.利用setTimeout第三个参数
    for (var i=1; i<=5; i++) {
    setTimeout( function timer(i) {
    console.log(i);
    }, i*1000,i );
    }
    2.利用bind方法
    for (var i=1; i<=5; i++) {
    setTimeou
  • 写在前面

    首先需要对一些基础的内容了解下:

    • 作用域
    • 闭包
    • 时间循环机制(Event Loop)
    console.log('global')
    
    setTimeout(function () {
       console.log('timeout1')
       new Promise(function (resolve) {
         console.log('timeout1_promise')
           resolve()
       }).then(function () {
         console.log('timeout1_then')
      })
    },2000)
    
    for (var i =
  • 1 什么是闭包

    闭包是定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。

    2 为什么需要闭包

    局部变量无法共享和保存,全局变量会污染,希望有一种长久的机制可以保存变量又不会污染全局。

    3 理解闭包

    JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。

    短答案:JavaScript中的闭包,无非就是沿着作用域链进行变量解析的过程。首先看一段话:

    每次定义一个函数,都会产生一个作用域链(scope chain)。当JavaScript寻找变量varible时(这个过程称为变量解析),总会优先在当前作用域链的第一个对象中查找属性va