摘要:閉包解決的問題獲取到函數(shù)內(nèi)部的變量讓變量不會(huì)隨著函數(shù)執(zhí)行完畢就銷毀而是保存在內(nèi)存中模擬私有變量閉包產(chǎn)生的問題容易造成內(nèi)存泄漏,保存的多了,卻沒有釋放的指向問題,在閉包里,指向的是關(guān)于閉包的小東西比如注釋部分省了外殼,
閉包概念:
能夠訪問另一個(gè)函數(shù)作用域的變量的函數(shù),來個(gè)栗子
為何son函數(shù)可以訪問到father函數(shù)的變量?
前提知識(shí):
js的數(shù)據(jù)基本類型:Number boolean String Null Undefined Symbol 復(fù)雜類型:Object
基本數(shù)據(jù)類型放在的 “棧” 中 ,負(fù)責(zé)數(shù)據(jù)類型是放在“堆”中,對(duì)于js,存儲(chǔ)基本數(shù)據(jù)類型采用的是 鍵:值來存的。
來個(gè)手?jǐn)]的圖
簡(jiǎn)單的說在使用基本數(shù)據(jù)類型的時(shí)候,使用的值,在使用對(duì)象的時(shí)候使用其實(shí)是一個(gè)地址。
function也是一個(gè)Object的分支,
在函數(shù)執(zhí)行的時(shí)候,先進(jìn)行預(yù)編譯的過程 ,所以先創(chuàng)建father的AO與GO,對(duì)于son,先創(chuàng)建自己的AO與GO,當(dāng)自己的找不到的時(shí)候,會(huì)從父級(jí)的去查找。
隨著son執(zhí)行完畢,son的執(zhí)行環(huán)境被銷毀,接著執(zhí)行fn(),然后執(zhí)行環(huán)境被銷毀,所以只會(huì)剩下全局的環(huán)境,所以son函數(shù)還在的,雖然執(zhí)行環(huán)境(AO被銷毀)。
閉包解決的問題:
1、獲取到函數(shù)內(nèi)部的變量
2、讓變量不會(huì)隨著函數(shù)執(zhí)行完畢就銷毀而是保存在內(nèi)存中
3、模擬私有變量...........
閉包產(chǎn)生的問題
1、容易造成內(nèi)存泄漏,保存的多了,卻沒有釋放
2、this的指向問題,在閉包里,this指向的是window
關(guān)于閉包的小東西
比如 注釋部分省了外殼,
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/105867.html
摘要:大名鼎鼎的閉包面試必問。閉包的作用是什么。看到閉包在哪了嗎閉包到底是什么五年前,我也被這個(gè)問題困擾,于是去搜了并總結(jié)下來。關(guān)于閉包的謠言閉包會(huì)造成內(nèi)存泄露錯(cuò)。閉包里面的變量明明就是我們需要的變量,憑什么說是內(nèi)存泄露這個(gè)謠言是如何來的因?yàn)椤? 本文為饑人谷講師方方原創(chuàng)文章,首發(fā)于 前端學(xué)習(xí)指南。 大名鼎鼎的閉包!面試必問。請(qǐng)用自己的話簡(jiǎn)述 什么是「閉包」。 「閉包」的作用是什么。 首先...
摘要:在此例中,在匿名函數(shù)被返回后,它的作用域鏈初始化為包含函數(shù)的活動(dòng)對(duì)象和全局變量對(duì)象。函數(shù)在執(zhí)行完畢后,其活動(dòng)對(duì)象也不會(huì)被銷毀,因?yàn)槟涿瘮?shù)的作用域鏈仍然在引用這個(gè)活動(dòng)對(duì)象,結(jié)果就是只是的執(zhí)行環(huán)境的作用域鏈會(huì)被銷毀,其活動(dòng)對(duì)象會(huì)留在內(nèi)存中。 寫在前面 注:這個(gè)系列是本人對(duì)js知識(shí)的一些梳理,其中不少內(nèi)容來自書籍:Javascript高級(jí)程序設(shè)計(jì)第三版和JavaScript權(quán)威指南第六版,...
摘要:定義函數(shù)的時(shí)候,為什么的值重新從開始了因?yàn)橛忠淮芜\(yùn)行了函數(shù),生成一個(gè)新的的活動(dòng)對(duì)象,所以的作用域鏈引用的是一個(gè)新的值。 前言 在js中,閉包是一個(gè)很重要又相當(dāng)不容易完全理解的要點(diǎn),網(wǎng)上關(guān)于講解閉包的文章非常多,但是并不是非常容易讀懂,在這里以《javascript高級(jí)程序設(shè)計(jì)》里面的理論為基礎(chǔ)。用拆分的方式,深入講解一下對(duì)于閉包的理解,如果有不對(duì)請(qǐng)指正。 寫在閉包之前 閉包的內(nèi)部細(xì)節(jié),...
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸耍虼宋闹兄豢炊?8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...
摘要:談起閉包,它可是兩個(gè)核心技術(shù)之一異步基于打造前端持續(xù)集成開發(fā)環(huán)境本文將以一個(gè)標(biāo)準(zhǔn)的項(xiàng)目為例,完全拋棄傳統(tǒng)的前端項(xiàng)目開發(fā)部署方式,基于容器技術(shù)打造一個(gè)精簡(jiǎn)的前端持續(xù)集成的開發(fā)環(huán)境。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老鳥,不論是面試求職,還是日...
閱讀 1083·2021-09-22 15:19
閱讀 1697·2021-08-23 09:46
閱讀 2226·2021-08-09 13:47
閱讀 1405·2019-08-30 15:55
閱讀 1408·2019-08-30 15:55
閱讀 1974·2019-08-30 15:54
閱讀 2795·2019-08-30 15:53
閱讀 713·2019-08-30 11:03