成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

閉包的簡單理解

EscapedDog / 828人閱讀

摘要:例變量就是返回的函數(shù),執(zhí)行的時候變量并沒有消失,一直駐扎在內(nèi)存中的,這時會彈出的這就是簡單的閉包形式。閉包的好處和應(yīng)用好處希望一個變量長期駐扎在內(nèi)存當中避免全局變量的污染是個全局變量,一直駐扎在內(nèi)存中,依次執(zhí)行會累加。

主要分三部分說:
一、什么是閉包?二、閉包有什么好處?應(yīng)用在哪里?

1、什么是閉包

第一個特點:可以是函數(shù)嵌套函數(shù)

function fna(){
       function fnb(){}
   }

第二個特點:內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量

function  fna(){
        var b=5;
        function fnb(){
            console.log(b);
        }
        fnb();
    }
fna();

b變量都要被內(nèi)部函數(shù)fnb()引用到,會一直駐扎在內(nèi)存中,不會被垃圾回收的,也就是說參數(shù)和變量不會被垃圾回收機制所收回。
那么什么是js垃圾回收機制呢?

function fna(){
        var a=1;
    }
fna();

例如,上面寫了個普通函數(shù)fna(),當fna();執(zhí)行完畢后變量a就不存在了,為了節(jié)省內(nèi)存。
例1:

function  fna(){
        var a=5;
        function fnb(){
            console.log(a);
        }
        return fnb;
    }
var fnc=fna();
fnc();      //5

變量c就是返回的fnb函數(shù),fnc()執(zhí)行的時候 變量a并沒有消失,一直駐扎在內(nèi)存中的,這時會彈出5的.這就是簡單的閉包形式。

2、閉包的好處和應(yīng)用

好處:
1.希望一個變量長期駐扎在內(nèi)存當中
2.避免全局變量的污染

var a=1;
function fna(){
    a++;
    console.log(a);
}
fna(); //2
fna(); //3
console.log(a);//3

a是個全局變量,一直駐扎在內(nèi)存中,依次執(zhí)行會累加。

function fna(){
     var a=1;
     a++;
     console.log(a);
}
fna(); //2
fna(); //2

如果把變量a設(shè)置為局部變量,每調(diào)用一次代碼重新執(zhí)行,調(diào)用后a就不存在,下次調(diào)用的時候a還是1;那么怎么能做到a即是局部變量,a又能累計呢?
這就是閉包所能做到的。
例2:

function fna(){
      var a=1;
       return function () {
          a++;
           console.log(a);
       };
}
var fnb=fna();
fnb(); //2
fnb(); //3
console.log(a) //undfined

構(gòu)成了函數(shù)嵌套函數(shù),當外面的函數(shù)執(zhí)行完畢后,內(nèi)部函數(shù)依舊可以調(diào)用到變量a;

(function(){
  console.log(1);
})();

()放函數(shù),函數(shù)聲明就會變成函數(shù)表達式,再加()立即執(zhí)行。
至此可以把例2中的代碼改寫一下.

var fna= (function () {
    var a=1;
    return function () {
        a++;
        console.log(a);
    }
})();
fna();//2
fna();//3

var a=1在外面是調(diào)用不到,減少全局變量的污染,把內(nèi)部函數(shù)變?yōu)樗接械模?/p>

這也就是
3.變量私有

var aaa = (function(){
    var a = 1;
    function bbb(){
        a++;
        console.log(a);
    }
    function ccc(){
        a++;
        console.log(a);
    }
    return {
        b : bbb,
        c : ccc
    }
})();
//aaa.b();  //2
//aaa.c();  //3

在循環(huán)中直接找到對應(yīng)元素的索引




    
    Title


  • 11111111111
  • 11111111111
  • 11111111111

console.log(i)彈出3,為什么呢?很明顯,當循環(huán)執(zhí)行結(jié)束的時候

aLi[i].onclick = function(){
           console.log(i);//3
      };

還沒執(zhí)行,當點擊的時候才會執(zhí)行,但此時i已經(jīng)變成3了。可以利用閉包改寫,可以把循環(huán)中的i當作個參數(shù)傳進去,就之前所說的內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量。

for(var i=0;i

把i當成參數(shù)穿進去。除了這種寫法還有另外一種方式

for(var i=0;i           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/95065.html

相關(guān)文章

  • 多層級理解閉包

    摘要:第二梯隊理解有了第一梯隊的認識,我們慢慢修正大腦中對閉包的認識。理解這句話就可以很好的與閉包這兩個字關(guān)聯(lián)起來理解閉包這個概念了??偨Y(jié)第二梯隊理解閉包是一個有特定功能的函數(shù)。第四梯隊理解閉包通過訪問外部變量,一個閉包可以維持這些變量。 閉包 閉包的概念困惑了我很久,記得當時我面試的時候最后一面有一個問題就是問題關(guān)于閉包的問題,然而到現(xiàn)在已經(jīng)完全不記得當時的題目是啥了,但仍然能夠回憶起當時...

    nemo 評論0 收藏0
  • 簡單理解JavaScript中閉包

    摘要:閉包在我理解是一種比較抽象的東西。所以我寫了一篇博文來方便自己理解閉包。那么現(xiàn)在我們可以解釋一下閉包的第一個定義在計算機科學(xué)中,閉包是引用了自由變量的函數(shù)。循環(huán)中創(chuàng)建閉包在我們使用的關(guān)鍵字之前,閉包的一個常見問題就出現(xiàn)在循環(huán)中創(chuàng)建閉包。 零. 前言 從我開始接觸前端時就聽說過閉包,但是一直不理解閉包究竟是什么。上網(wǎng)看了各種博客,大家對閉包的說法不一。閉包在我理解是一種比較抽象的東西。所...

    sihai 評論0 收藏0
  • 簡單而清楚地理解閉包

    摘要:大多數(shù)非閉包的情況下,函數(shù)的外部函數(shù)即全局變量函數(shù)被調(diào)用時,也會創(chuàng)建一條作用域鏈下稱鏈,并將鏈的內(nèi)容包含到鏈中,然后將當前函數(shù)的活動對象可以簡單理解為所有的內(nèi)部變量添加到鏈條的頂端。 什么是閉包?閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。---《JavaScript高級程序設(shè)計》通常來說,當一個函數(shù)可以訪問另一個函數(shù)內(nèi)部定義的變量(包括屬性和方法)時,這個函數(shù)可以稱之為閉包: f...

    SimonMa 評論0 收藏0
  • 通過示例學(xué)習JavaScript閉包

    摘要:譯者按在上一篇博客,我們通過實現(xiàn)一個計數(shù)器,了解了如何使用閉包,這篇博客將提供一些代碼示例,幫助大家理解閉包。然而,如果通過代碼示例去理解閉包,則簡單很多。不過,將閉包簡單地看做局部變量,理解起來會更加簡單。 - 譯者按: 在上一篇博客,我們通過實現(xiàn)一個計數(shù)器,了解了如何使用閉包(Closure),這篇博客將提供一些代碼示例,幫助大家理解閉包。 原文: JavaScript Clos...

    xingpingz 評論0 收藏0
  • 簡單理解 JavaScript 閉包問題

    摘要:從我年開始接觸前端,知道閉包這個詞,已經(jīng)過去兩年了。概念閉包,在高級程序設(shè)計里面是這樣介紹的閉包是指有權(quán)訪問另一個作用域中的變量的函數(shù)。這樣形成的閉包雖然可以使外部可以訪問到內(nèi)部的函數(shù),但是導(dǎo)致了原有的作用域鏈不釋放,會造成內(nèi)存泄漏。 從我16年開始接觸前端,知道閉包這個詞,已經(jīng)過去兩年了。這兩年里,閉包這個概念我在很多地方了解過,卻實在沒有真的理解,久而久之,變成了一塊心病。這不,趁...

    lyning 評論0 收藏0
  • JavaScript閉包簡單理解

    摘要:閉包是函數(shù)內(nèi)部的子函數(shù)能讀取局部變量二閉包的特點函數(shù)里面嵌套函數(shù)內(nèi)部函數(shù)能訪問外部函數(shù)的變量定義的參數(shù)和變量不會回收三閉包的前提先明白什么是全局變量和局部變量中聲明變量格式關(guān)鍵字變量名標識符。建議在退出函數(shù)之前,將不使用的局部變量全部刪除。 一、閉包的概念 閉包是指一個函數(shù)能夠訪問其函數(shù)外部作用域中的變量。JavaScript閉包是函數(shù)內(nèi)部的子函數(shù)能讀取局部變量 二、閉包的特點 函數(shù)...

    hzx 評論0 收藏0

發(fā)表評論

0條評論

EscapedDog

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<