闭包

101 阅读1分钟

闭包

变量的作用域:全局变量和局部变量

Js函数内部可以读取全局变量,函数外部无法读取函数内的局部变量 函数内部声明变量一定要用var等命令,如果不用,则是全局变量。

var n=99
function f1(){
 console.log(n);
}
f1();//99

闭包(closure):能够读取其他函数内部变量的函数

定义在一个函数内部的函数,闭包是函数内部和函数外部链接起来的桥梁 所读取到的变量值始终保存在内存中

注意: 1.闭包会使得函数中的变量都被保存在内存中,内存消耗大,不能滥用,否则会造成网页性能问题,导致内存泄漏 解决方法:在退出函数之前,将不使用的局部变量全部删除。

2.闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,不要随便改变父函数内部变量的值。

for (var i = 1; i <= 5; i++) {

    (function(i){

        setTimeout( function timer() {

              console.log(i);

          },  1000 );

    })(i);

}
for (let i = 1; i <= 5; i++) {

  setTimeout( function timer() {

      console.log(i);

  }, 1000 );

}
//闭包不一定要return
 (function (){
        var a = 10;
        add.onclick = function (){
            a++;
            span.innerHTML = a;
        }        
})()