闭包和闭包的应用场景

定义

闭包指的是函数与定义该函数环境的组合。比如下面函数,函数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);
})()

函数柯里化

posted @ 2018-10-02 16:57  lyk_109  阅读(442)  评论(0编辑  收藏  举报