闭包

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

}

}

原文地址:https://www.cnblogs.com/xiaofenguo/p/12134022.html