成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通俗地理解javascript閉包

lingdududu / 1112人閱讀

摘要:每個家庭就好比一個閉包函數(shù)不同的家庭有不同的老婆老公孩子,他們的名字甚至也可以是一樣的,然后每個家庭是獨立的。

定義

閉包是一個擁有許多變量和綁定了這些變量的環(huán)境的表達式(通常是一個函數(shù)),因而這些變量也是該表達式的一部分。。(百度百科)

通俗的說:JavaScript中所有的function都是一個閉包

案例解讀

基本案例

function foo() {
    var i = 0;
    return function() {
        return ++i;
    }
}

var bar=foo();

這里的foo運行后返回了一個函數(shù),這個函數(shù)擁有一個自己私有的變量i,這個變量i不會因為foo運行結(jié)束了就被銷毀。
返回的這個函數(shù)被賦值給bar,這個bar就是一個閉包,它的特征是擁有自己的私有成員,該例子中私有成員是變量i,這個私有成員可以是一個函數(shù)

帶有循環(huán)的閉包

function foo() {
    var result = [];
    for (var i = 0; i < 10; i++) {
        result[i] = function(){return i};
    }

return result;
}

var bar = foo();

現(xiàn)象如上,原因是循環(huán)生成了10個閉包,但是,他們的私有成員i是他們共有的,當(dāng)最后一個閉包函數(shù)生成后,i的值已經(jīng)等于10,而前面的閉包的i都是這個i

循環(huán)生成閉包并且擁有真正的自己i

function foo() {
    var result = [];
    for (var i = 0; i < 10; i++) {
        result[i] = (function(i) {
            return function() {
                return i
            }
        })(i);仔細對比這里的區(qū)別
    }

    return result;
}

var bar = foo();

顯然,循環(huán)生成的每個閉包都真正擁有的自己私有變量,解決辦法是代碼中的自執(zhí)行函數(shù)包裹需要生成的閉包函數(shù),并為閉包函數(shù)提供一個獨立的變量,這個時候它們的i是來自包裹它們的自執(zhí)行函數(shù)的參數(shù),而不是剛才的foo里面的那個i,所以它們各是各的

總結(jié)

閉包的用途在我看來是為函數(shù)提供私有的變量,使得數(shù)據(jù)安全,不會污染別人的變量,別人的成員,別人的老婆。

每個家庭就好比一個閉包函數(shù),不同的家庭有不同的老婆、老公、孩子,他們的名字甚至也可以是一樣的,然后每個家庭是獨立的。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78384.html

相關(guān)文章

  • 一個考查作用域以及閉包的題目

    摘要:怎么理解這句話呢也就是說一個函數(shù)離開了創(chuàng)建時的作用域,但是其還是會和這個作用域以及這個函數(shù)外部的作用域相關(guān)聯(lián),也就是說變量依舊是那個變量以這個題目為參照,那么結(jié)果就很明了了。 var a = 2;var func = (function(){ var a = 3; return function(){ a++; console.log(a); } })(); func(...

    sushi 評論0 收藏0
  • JavaScript 中的閉包

    摘要:簡要介紹閉包可謂是中的一大特色了,即使你對閉包沒概念,你可能已經(jīng)在不知不覺中使用到了閉包。這就是閉包的獨特之處。當(dāng)頁面中存在過多的閉包,或者閉包的嵌套很多很深時,會導(dǎo)致內(nèi)存占用過多。因此,在這里建議慎用閉包。 1. 簡要介紹 閉包可謂是js中的一大特色了,即使你對閉包沒概念,你可能已經(jīng)在不知不覺中使用到了閉包。閉包是什么,閉包就是一個函數(shù)可以訪問到另一個函數(shù)的變量。這就是閉包,解釋起...

    liuhh 評論0 收藏0
  • 還是不明白JavaScript - 執(zhí)行環(huán)境、作用域、作用域鏈、閉包嗎?

    摘要:所以,全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個對象。講到這里,可能你已經(jīng)對執(zhí)行環(huán)境執(zhí)行環(huán)境對象變量對象作用域作用域鏈的理解已經(jīng)他們之間的關(guān)系有了一個較清晰的認識。 JavaScript中的執(zhí)行環(huán)境、作用域、作用域鏈、閉包一直是一個非常有意思的話題,很多博主和大神都分享過相關(guān)的文章。這些知識點不僅比較抽象,不易理解,更重要的是與這些知識點相關(guān)的問題在面試中高頻出現(xiàn)。之前我也看過...

    jlanglang 評論0 收藏0
  • 《你不知道的javascript》筆記_作用域與閉包

    摘要:建筑的頂層代表全局作用域。實際的塊級作用域遠不止如此塊級作用域函數(shù)作用域早期盛行的立即執(zhí)行函數(shù)就是為了形成塊級作用域,不污染全局。這便是閉包的特點吧經(jīng)典面試題下面的代碼輸出內(nèi)容答案個如何處理能夠輸出閉包方式方式下一篇你不知道的筆記 下一篇:《你不知道的javascript》筆記_this 寫在前面 這一系列的筆記是在《javascript高級程序設(shè)計》讀書筆記系列的升華版本,旨在將零碎...

    galaxy_robot 評論0 收藏0
  • 深入理解閉包的概念

    摘要:離開閉包的泥淖,給這個例子一個較為合理的寫法總結(jié)理解閉包的概念是重要的,但我們不應(yīng)當(dāng)過多的使用閉包,它有優(yōu)點,也優(yōu)缺點,是一把雙刃劍。 閉包 關(guān)于閉包,目前有如下說法: 閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合(MDN) 函數(shù)對象可以通過作用域鏈相互關(guān)聯(lián)起來,函數(shù)體內(nèi)部的變量都可以保存在函數(shù)作用域內(nèi)。這種特性在計算機科學(xué)文獻中被稱為閉包(JavaScript權(quán)威指南) 閉包,指的是詞...

    anyway 評論0 收藏0

發(fā)表評論

0條評論

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