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

資訊專欄INFORMATION COLUMN

Js學(xué)習(xí)筆記:閉包

Crazy_Coder / 1966人閱讀

摘要:一前言這個(gè)周末,注意力都在學(xué)習(xí)基礎(chǔ)知識(shí)上面,剛好看到了閉包這個(gè)神圣的東西,所以打算把這兩天學(xué)到的總結(jié)下來(lái),算是鞏固自己所學(xué)。因此要注意閉包的使用,否則會(huì)導(dǎo)致性能問(wèn)題。五總結(jié)閉包的作用能夠讀取其他函數(shù)內(nèi)部變量。

# 一、前言

這個(gè)周末,注意力都在學(xué)習(xí)基礎(chǔ)Js知識(shí)上面,剛好看到了閉包這個(gè)神圣的東西,所以打算把這兩天學(xué)到的總結(jié)下來(lái),算是鞏固自己所學(xué)。也可能有些不正確的地方,也請(qǐng)大家看到了,麻煩在評(píng)論下提醒一下,算是互相學(xué)習(xí)了。

二、什么是閉包?
百度百科定義:閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。

在解釋之前,得先講講作用域。先來(lái)看下面這個(gè)示例:

var a = 1;
function f(){
  var b = 2;
  console.log(a) // 1
}
console.log(b) // undefined

示例中包含了兩種作用域,一種是屬于全局的全局作用域,另一種是屬于函數(shù)f的局部作用域。由于Javascript這種鏈?zhǔn)阶饔糜?/strong>(父作用域是可以被其子作用域訪問(wèn)的,而子作用域卻不能被父作用域訪問(wèn))的機(jī)制,使得示例最后一行輸出了undefined

從此可以看出,無(wú)法從父作用域中訪問(wèn)子作用域。而我們?cè)賮?lái)看閉包的定義:閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。也就是閉包可以讓我們從父作用域中訪問(wèn)到子作用域,具體怎么實(shí)現(xiàn)的呢?來(lái)看這個(gè)經(jīng)典的例子:

function foo(){
    var a = 2;
    function bar(){
        console.log(a);
    }
    return bar;
}

var baz = foo();

baz(); // 2 -> 這就是閉包的效果

這個(gè)示例中,閉包就是函數(shù)bar??梢钥吹?,我們通過(guò)在函數(shù)foo內(nèi)部定義其子函數(shù)bar,并將其作為foo返回值,因?yàn)?b>bar函數(shù)作用域可以訪問(wèn)foo的作用域,所以實(shí)現(xiàn)了從全局作用域訪問(wèn)foo函數(shù)作用域的效果。

三、閉包的應(yīng)用

其實(shí),平時(shí)你所寫(xiě)的代碼中,早就用到了閉包,只是你還沒(méi)發(fā)現(xiàn)而已。

本質(zhì)上,無(wú)論何時(shí)何地,如果將函數(shù)當(dāng)作值傳遞到其他地方使用(非函數(shù)所在作用域),你就已經(jīng)使用了閉包。例如上面示例說(shuō)的函數(shù)bar,我們將他傳遞到了全局作用域下,通過(guò)這種方式訪問(wèn)到本該不能訪問(wèn)的變量a。

在定時(shí)器、事件監(jiān)聽(tīng)器、Ajax請(qǐng)求、任何其他異步(或同步)任務(wù)中,只要使用了回調(diào)函數(shù),實(shí)際上就是在使用閉包!

四、注意事項(xiàng)

閉包會(huì)讓他所在作用域中的變量始終保存在內(nèi)存中,而不會(huì)被垃圾回收機(jī)制回收。

function foo(p){
    function bar(){
        console.log(++p);
    }
    return bar;
}

var baz = foo(1);
baz(); // 2
baz(); // 3
baz(); // 4

var bazz = foo(2);

bazz(); // 3
bazz(); // 4
bazz(); // 5

baz(); // 5

看到了沒(méi),閉包的使用,函數(shù)調(diào)用之后,讓其外層函數(shù)的內(nèi)部變量(foo函數(shù)內(nèi)的變量)始終保存在了內(nèi)存中,而不會(huì)被回收。

值得注意的是,每次調(diào)用一次foo,都會(huì)生成一個(gè)新的閉包,都會(huì)在內(nèi)存中保存下其外層函數(shù)的內(nèi)部變量。因此要注意閉包的使用,否則會(huì)導(dǎo)致性能問(wèn)題。

五、總結(jié)

閉包的作用:

能夠讀取其他函數(shù)內(nèi)部變量。

讓其他函數(shù)的內(nèi)部變量始終保存在內(nèi)存中。

參考:

阮一峰的Javascript入門教程——閉包

書(shū)籍:P43,你不知道的Javascript之閉包——上卷。

附:你不知道的Javascript系列電子書(shū)網(wǎng)盤(pán)鏈接, 密碼:i8jf

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

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

相關(guān)文章

  • JS學(xué)習(xí)筆記——閉包

    摘要:什么是閉包定義我所理解的閉包就是,即使外部函數(shù)已經(jīng)運(yùn)行完畢,內(nèi)部函數(shù)仍能訪問(wèn)外部函數(shù)的作用域中的變量。閉包的應(yīng)用場(chǎng)景私有變量模塊需求只能通過(guò)函數(shù)提供的方法訪問(wèn)函數(shù)內(nèi)部的變量隱藏。為什么閉包很重要參考資料征服面試什么是閉包 1. 什么是閉包 MDN定義:Closures are functions that refer to independent (free) variables (v...

    Karuru 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記(第7章)(函數(shù)表達(dá)式)

    摘要:遞歸閉包模仿塊級(jí)作用域私有變量小結(jié)在編程中,使用函數(shù)表達(dá)式可以無(wú)需對(duì)函數(shù)命名,從而實(shí)現(xiàn)動(dòng)態(tài)編程。匿名函數(shù)也稱為拉姆達(dá)函數(shù)。函數(shù)聲明要求有名字,但函數(shù)表達(dá)式不需要。中的函數(shù)表達(dá)式和閉包都是極其有用的特性,利用它們可以實(shí)現(xiàn)很多功能。 1、遞歸 2、閉包 3、模仿塊級(jí)作用域 4、私有變量 5、小結(jié) 在JavaScript編程中,使用函數(shù)表達(dá)式可以無(wú)需對(duì)函數(shù)命名,從而實(shí)現(xiàn)動(dòng)態(tài)編程。匿名函數(shù)也稱...

    xiaokai 評(píng)論0 收藏0
  • [學(xué)習(xí)筆記] JavaScript 閉包

    摘要:但是,必須強(qiáng)調(diào),閉包是一個(gè)運(yùn)行期概念。通過(guò)原型鏈可以實(shí)現(xiàn)繼承,而與閉包相關(guān)的就是作用域鏈。常理來(lái)說(shuō),一個(gè)函數(shù)執(zhí)行完畢,其執(zhí)行環(huán)境的作用域鏈會(huì)被銷毀。所以此時(shí),的作用域鏈雖然銷毀了,但是其活動(dòng)對(duì)象仍在內(nèi)存中。 學(xué)習(xí)Javascript閉包(Closure)javascript的閉包JavaScript 閉包深入理解(closure)理解 Javascript 的閉包JavaScript ...

    sunsmell 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • js學(xué)習(xí)筆記閉包

    摘要:本實(shí)例來(lái)自語(yǔ)言精粹構(gòu)造器調(diào)用模式閉包變成了私有屬性當(dāng)函數(shù)返回時(shí),方法依然可以訪問(wèn),函數(shù)可以訪問(wèn)他被創(chuàng)建時(shí)所處山下文環(huán)境,這就是閉包。 本實(shí)例來(lái)自《javascript語(yǔ)言精粹》 構(gòu)造器調(diào)用模式: var Quo = function(string){ this.status = string; }; Quo.prototype.get_status=function(){ ...

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

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

0條評(píng)論

閱讀需要支付1元查看
<