首页 > 技术文章 > 闭包

wb336035888 2017-06-25 22:13 原文

最近工作比较忙,这几天看到好多朋友不太清楚闭包,所以我在这里简单的整理了一下,希望可以用几个简单的例子来解释说明一下闭包的用法以及特性。
闭包总的用一句话来说就是拿到不属于他的东西。但是也有缺点,就是延长了作用域链。
为什么说是拿到不属于他的东西呢?
因为在一个function中定义一个变量,在外部是拿不到的,此时如果在函数内部return一个function的话,,function 内部在此时是可以拿到这个变量的,拿到以后又retuen了出去
这就实现了一个作用域内的函数拿到了其他作用域内的东西。
在这个闭包函数重新赋值给另外一个定义的变量以后,每次调用这个闭包的话其实是执行的这个闭包函数外的东西,此时闭包只执行了一次,这个也就是为什么我们定义一个随机数在多次执行的时候只会打印出一个相同值得原理(实现了数据逇缓存效果)。
随机数缓存
function getNum(){
        var num=parseInt(Math.random()*20+1);
        return function(){
            return num;
        }
    }
    var ff=getNum();
    console.log(ff());
    console.log(ff());
    console.log(ff());
    console.log(ff());
    console.log(ff());
此时上面输出的都是同一个值。因为此时他把值已经缓存在了num里面,每次调用都是访问的num值,是一个定值。
闭包的应用场景:
以下是闭包使用的一个场景,一般使用第二种,第一种太消耗内存了,不推荐使用。
 
function foo(){
        var n = 1;
        return function(){
            console.log(++n);
        }
    }
    var inner = foo();
    inner();
    inner();
    inner();
    inner();
此时的输出就是2、3、4、5、
 希望此篇文章能对你有所帮助!~

推荐阅读