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

資訊專欄INFORMATION COLUMN

淺談JavaScript閉包

hsluoyz / 2867人閱讀

摘要:但是函數(shù)返回了內(nèi)部函數(shù),內(nèi)部函數(shù)會(huì)隨時(shí)訪問變量所以垃圾回收機(jī)制是不會(huì)回收函數(shù)的內(nèi)部作用域的,這就是閉包的含義。也就是函數(shù)在定義的詞法作用域以外的地方被調(diào)用,閉包使得函數(shù)可以繼續(xù)訪問定義時(shí)的詞法作用域。

  初學(xué)JavaScript閉包時(shí),閉包這個(gè)概念在我眼里及其的神秘,也不知道這個(gè)東西在講什么,尤其某些地方的閉包概念定義的非常抽象,屬于那種本來你可能明白這個(gè)概念,看了反而又把你給繞糊涂了,學(xué)習(xí)了這么長時(shí)間的JavaScript,看了不少的書,對(duì)閉包的這個(gè)概念也算是稍稍有點(diǎn)體會(huì)的了,這里順便推薦兩本書《你不知道的JavaScript》和《JavaScript忍者秘籍》。
  之前有次面試的時(shí)候,面試官讓我寫一個(gè)閉包的例子,我就寫了下面的代碼:

var a = 100;
(function(){
    console.log(a); //100
})();

上面這個(gè)例子從廣義上講確實(shí)算是一個(gè)閉包的例子,但是實(shí)質(zhì)上講其實(shí)算是一個(gè)詞法作用域的例子,其中涉及到RHS。但卻不是一個(gè)很合適的講述閉包的例子,后面看到一個(gè)例子算是一個(gè)比較好解釋閉包的代碼:

function fn(){
    var a = 100;
    function func(){
        console.log(a);
    }
    return func;
}

var func = fn();
func(); //100

  這個(gè)例子才算是一個(gè)比較好的閉包的概念。

當(dāng)函數(shù)可以記住并訪問所在的詞法作用域時(shí),就產(chǎn)生了閉包,即使函數(shù)是在當(dāng)前的詞法作用域之外的執(zhí)行的。

  上面這個(gè)概念是引申自《你所不知道的JavaScript》中,變量a定義在函數(shù)fn()的作用域中,并且函數(shù)fn()中含有一個(gè)內(nèi)部函數(shù)func(),內(nèi)部函數(shù)func()持有對(duì)變量a的引用。在正常情況下,當(dāng)函數(shù)func執(zhí)行后就,內(nèi)部的變量就會(huì)被垃圾回收機(jī)制所回收(比如變量a)。但是函數(shù)fn()返回了內(nèi)部函數(shù)func(),內(nèi)部函數(shù)func()會(huì)隨時(shí)訪問變量a,所以垃圾回收機(jī)制是不會(huì)回收函數(shù)fn()的內(nèi)部作用域的,這就是閉包的含義。也就是

函數(shù)在定義的詞法作用域以外的地方被調(diào)用,閉包使得函數(shù)可以繼續(xù)訪問定義時(shí)的詞法作用域。

  現(xiàn)在你對(duì)閉包的理解會(huì)不會(huì)有種恍然大悟的感覺呢?如果沒有?那建議看看《你所不知道的JavaScript》和《JavaScript忍者秘籍》這兩本書,里面對(duì)閉包講解的都非常的棒。

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

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

相關(guān)文章

  • 淺談JavaScript中的閉包

    摘要:在內(nèi)部,理所當(dāng)然能訪問到局部變量,但當(dāng)作為的返回值賦給外的全局變量時(shí),神奇的事情發(fā)生了在全局作用域中訪問到了,這就是閉包。而閉包最神奇的地方就是能在一個(gè)函數(shù)外訪問函數(shù)中的局部變量,把這些變量用閉包的形式放在函數(shù)中便能避免污染。 一、閉包是什么? 《JavaScript高級(jí)程序設(shè)計(jì)》中寫道:閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù),如果用下定義的觀點(diǎn)看,這句話就是說閉包是函數(shù),我...

    Riddler 評(píng)論0 收藏0
  • 淺談Javascript閉包和匿名函數(shù)【1】

    摘要:我們可以用普通函數(shù)內(nèi)部嵌套匿名函數(shù),形成一個(gè)閉包來使變量駐留在內(nèi)存中。局部變量閉包為什么要將賦值給變量呢這里我們就要談到匿名函數(shù)調(diào)用問題匿名函數(shù)如何調(diào)用還是上面的例子會(huì)將整個(gè)函數(shù)體打印出來這樣才調(diào)用了函數(shù)內(nèi)部的匿名函數(shù)看到這里。 閉包含義: 閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的常見的方式,就是在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù),通過另一個(gè)函數(shù)訪問這個(gè)函數(shù)的局部變量。 這...

    cyqian 評(píng)論0 收藏0
  • 淺談Javascript閉包中作用域及內(nèi)存泄漏問題

    摘要:將作用域賦值給變量這里的作用域是,而不是將作用域賦值給一個(gè)變量閉包返回瀏覽器中內(nèi)存泄漏問題大家都知道,閉包會(huì)使變量駐留在內(nèi)存中,這也就導(dǎo)致了內(nèi)存泄漏。 上一章我們講了匿名函數(shù)和閉包,這次我們來談?wù)勯]包中作用域this的問題。 大家都知道,this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的,如果this在全局就是[object window],如果在對(duì)象內(nèi)部就是指向這個(gè)對(duì)象,而閉包卻是在運(yùn)行...

    source 評(píng)論0 收藏0
  • 云天視角-淺談閉包

    摘要:函數(shù)在執(zhí)行的時(shí)候執(zhí)行函數(shù),將當(dāng)前的變量對(duì)象由于當(dāng)前的環(huán)境是函數(shù),所以將其活動(dòng)對(duì)象作為變量對(duì)象添加到作用域鏈的前端。此時(shí),由于在執(zhí)行,而作用域鏈也存在,所以可以在作用域鏈上進(jìn)行查找,去訪問的變量。 一、現(xiàn)狀 閉包是jser繞不過的坎,一直在都在說,套用 simpson 的話來說:JavaScript中閉包無處不在,你只需要能夠識(shí)別并擁抱它。 閉包是基于詞法作用域書寫代碼時(shí)的自然結(jié)果,你甚...

    nanfeiyan 評(píng)論0 收藏0
  • 淺談對(duì)JavaScript閉包的理解

    摘要:關(guān)于循環(huán)和閉包當(dāng)循環(huán)和閉包結(jié)合在一起時(shí),經(jīng)常會(huì)產(chǎn)生讓初學(xué)者覺得匪夷所思的問題。閉包是一把雙刃劍是比較難以理解和掌握的部分,它十分強(qiáng)大,卻也有很大的缺陷,如何使用它完全取決于你自己。 在談閉包之前,我們首先要了解幾個(gè)概念: 什么是函數(shù)表達(dá)式? 與函數(shù)聲明有何不同? JavaScript查找標(biāo)識(shí)符的機(jī)制 JavaScript的作用域是詞法作用域 JavaScript的垃圾回收機(jī)制 先來...

    missonce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<