什么是闭包?闭包的优缺点?

2023-01-11 0 481

旋量群(closure)是javascript的两大症结,也是它的民族特色。许多高阶应用领域都要倚靠旋量群来同时实现。

1、表达式codice

要认知旋量群,具体来说要认知javascript的特定的表达式codice。

表达式的codice不外乎就三种:全局表达式和codice。

javascript词汇的不同之处就是:表达式内部能间接加载全局表达式,但在表达式内部难以加载表达式内部的codice。

特别注意点:在表达式内部新闻稿表达式的这时候,很大要采用var指示。假如不必不然,你事实上新闻稿的是两个全局表达式!

2、怎样从内部加载表达式内部的codice?

现。

那是在表达式内部,再表述两个表达式。

function f1(){

    var n=999;

    function f2(){

      alert(n); // 999

    }

  }

在下面的标识符中,表达式f2就被主要包括在表达式f1内部,这时f1内部的大部份codice,对f2都是由此可见的。但如此一来就没用,f2内部的codice,对f1是不由此可见的。

这是Javascript词汇独有的”拉艾codice”内部结构(chain scope),

子第一类会二级二级地向下找寻大部份父第一类的表达式。因此,父第一类的大部份表达式,幺第一类都是由此可见的,但若则不设立。

难道f2能加载f1中的codice,因此假如把f2做为codice,他们不就能在f1内部加载它的内部表达式了吗!

3、旋量群的概念

下面标识符中的f2表达式,是旋量群。

各种专业文献的旋量群表述都非常抽象,我的认知是: 旋量群是能够加载其他表达式内部表达式的表达式。

由于在javascript中,只有表达式内部的子表达式才能加载codice,因此说,旋量群能简单认知成“表述在两个表达式内部的表达式“。

因此,在本质上,旋量群是将表达式内部和表达式内部连接起来的桥梁。

4、旋量群的用途

旋量群能用在许多地方。它的最大用处有两个,两个是前面提到的能加载表达式内部的表达式,另两个是让这些表达式的值始终保持在内存中,不会在f1调用后被自动清除。

为甚么会这样呢?原因就是f1是f2的父表达式,而f2被赋给了两个全局表达式,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

这段标识符中另两个值得特别注意的地方,是”nAdd=function(){n+=1}”这一行,具体来说在nAdd前面没有采用var关键字,因此nAdd是两个全局表达式,而不是codice。其次,nAdd的值是两个匿名表达式(anonymous function),而这个匿名表达式本身也是两个旋量群,因此nAdd相当于是两个setter,能在表达式内部对表达式内部的codice进行操作。

5、采用旋量群的特别注意点

(1)由于旋量群会使得表达式中的表达式都被保存在内存中,内存消耗很大,因此不能滥用旋量群,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出表达式之前,将不采用的codice全部删除。

(2)旋量群会在父表达式内部,改变父表达式内部表达式的值。因此,假如你把父表达式当作第一类(object)采用,把旋量群当作它的公用方法(Public Method),把内部表达式当作它的私有属性(private value),此时很大要小心,不要随便改变父表达式内部表达式的值。

原作者姓名:cxying

原出处:博客园原文链接:甚么是旋量群?旋量群的优劣? – morethanpeace – 博客园

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务