zoukankan      html  css  js  c++  java
  • 闭包

    闭包就是可以访问其他函数内部的变量的函数,是把内部函数与外部函数连接起来的桥梁。闭包的目的是为了隐藏变量,这个变量不想暴露在全局环境中,就需要定义在函数内部,形成局部作用域,同时向外部暴露一个方法,通过这个方法可以访问这个变量,就需要return 一个函数;

    闭包需要函数套函数,再return 一个函数,

    函数里面套函数,是为了制造局部函数作用域,return一个函数是为了内部的函数可以被调用,从而形成闭包;

    function aa(){

    for(var i=0; i<10;i++){

    setTimeout(function(){

    console.log(i)

    },2000);

    }

    }

    结果:9 9 9 9 9 9 9 9 9

    因为,setTimeout会把执行的函数放在堆栈中暂时不执行,2000ms后开始执行,i是全局变量,此时的值是9,所以输出的都是9

    解决办法: var 改成let ,let定义局部变量,或者直接改成立即执行函数,形成局部作用域

    function aa(){

    for(let i=0; i<10;i++){

    setTimeout(function(){

    console.log(i)

    },2000);

    }

    }

    function aa(){

    for(var i=0; i<10;i++){

    setTimeout(

    (function(){console.log(i)})()

    ,2000);

    }

    }

  • 相关阅读:
    导论
    Array
    Singleton
    Bridge
    Mediator
    interpreter
    Visitor
    Flyweight
    Command
    Chain Of Responsibility
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/12134022.html
Copyright © 2011-2022 走看看