闭包和闭包的应用场景

Posted ykli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包和闭包的应用场景相关的知识,希望对你有一定的参考价值。

定义

闭包指的是函数与定义该函数环境的组合。比如下面函数,函数foo和变量name是函数fn1的局部作用域中,fn1执行后把函数foo返回给fn2全局变量,这样就形成了一个闭包。这个闭包的函数是foo,而环境则是之前执行fn1时产生的局部作用域。

function fn1() {
    var name = "zhangsan";
    function foo() {
        console.log(name);
    };
    return foo;
}
var fn2 = fn1();

应用

私有化变量:

函数的每次执行产生闭包,他们里面的变量只有该闭包可访问。
定时器例子: counter1, counter2的每次执行都会使他们自己的count自增,从而各自记录执行的次数而不相互干扰。

function createCounter() {
    var count = 0;
    var counter = function() {
        count++;
        console.log("执行第" + count + "次");
    }
}
var counter1 = createCounter();
var counter2 = createCounter();
counter1();  // 执行第1次
counter1();  // 执行第2次
counter2();  // 执行第1次
counter1();  // 执行第3次

立即执行函数实现块级作用域

为了避免全局中出现过多不必要的变量,造成潜在的变量污染的风险,可以使用立即执行函数来实现块级作用域
例:如下,只需要一次性计算1加到100并输出到consolle。这样可以在执行完立即销毁变量。

(function(){
    var i = 0;
    var sum = 0;
    for (; i <= 100; i++) {
        sum += i;
    }
    console.log(sum);
})()


以上是关于闭包和闭包的应用场景的主要内容,如果未能解决你的问题,请参考以下文章

js闭包之应用场景

了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

JavaScript 里的闭包是啥?应用场景都有哪些

Spark闭包与序列化

有关闭包的总结

javascript之闭包理解以及应用场景