js闭包

1.什么是闭包
在js中,函数外部访问不了函数内部变量,函数内部可以访问外部函数变量。
可以访问另一函数作用域变量的函数都是闭包。

2.示例一:

function a(){
    var n=0;
    function inc(){
        n++;
        console.log(n);
    }
    inc();
    inc();
}

运行结果:

1
2

inc可以访问外部变量n

3.示例二:

function a(){
    var n=0;
    this.inc=function(){
        n++;
        console.log(n);
    };
}
var c = new a();
c.inc();
c.inc();

运行结果:

1
2

4.示例三:

function a(){
    var n=0;
    function inc(){
        n++;
        console.log(n);
    }
    return inc;
}
var c=a();
c();
c();

运行结果:

1
2

5.常见陷阱

function func(){
    var result = new Array();
    for(var i=0;i<10;i++){
        result[i]=function(){
            return i;
        };
    }
    return result;
}
var funcs=func();
console.log(funcs[0]());

运行结果:

10

func()返回的是函数名数组,此时i=10;
执行数组中函数 return i;所以返回10,而不是0

6.闭包的缺点
内部函数引用外边变量,会占用内存。不必要的闭包会造成内存消耗。

原文地址:https://www.cnblogs.com/shijingjing07/p/7301655.html