码迷,mamicode.com
首页 > 其他好文 > 详细

闭包和闭包的应用场景

时间:2018-10-02 20:42:16      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:自己   fun   组合   UNC   code   返回   输出   foo   变量   

定义

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

闭包和闭包的应用场景

标签:自己   fun   组合   UNC   code   返回   输出   foo   变量   

原文地址:https://www.cnblogs.com/ykli/p/9737483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!