天马行空

javascript之闭包

  • 2019-03-04 13:31:03
  • 466 次阅读
  • 稿源:天马行空

在程序语言中,所谓闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。这些外部执行域的非持久型变量神奇地保留它们在闭包最初定义(或创建)时的值。

看到上面这么长的话是是不是感觉太抽象了,那么,为了方便,我们简单地理解为可以用一个函数去访问另外一个函数的内部变量的方式就是闭包。

js_closure

我们知道内部变量就是局部变量,是不可以随便使用访问的。

(1)内部变量事例

function fn() {
    var n = 8;
}
console.log(n);  // 这是错的,n是一个局部变量 

(2)闭包事例:

<script>
    function outerFn()
    {
        var number = 0;
        function innerFn()
        {
            number++;
            console.log(number);
        }
        return innerFn;
    }

    var obj1 = outerFn();
    obj1();  obj1();  // 结果 1,2
    var obj2 = outerFn();
    obj2();  obj2();  // 结果 1,2
 </script>

(3)闭包的特点:

a.优点:不产生全局变量,实现属性私有化。

b.缺点:闭包中的数据会常驻内存,在不用的时候要删掉否则会导致内存溢出。

喜欢 3

文章评论 (1)

  1. sEvenbites说道:

    Hello There. I discovered your blog the use of msn. This is a really neatly written article.
    I will make sure to bookmark it and return to read more of your useful info.

    Thank you for the post. I’ll certainly comeback.

    [1楼]网友 Linux | Firefox 56.0.4 回复   

表情

大眼 可爱 大笑 坏笑 害羞 发怒 折磨 快哭了 大哭 白眼 晕 流汗 困 腼腆 惊讶 憨笑 色 得意 骷髅 囧 睡觉 眨眼 亲亲 疑问 闭嘴 难过 淡定 抗议 鄙视 猪头