摘要:然而,引擎很可能雖然這要看具體實(shí)現(xiàn)將會仍然將這個結(jié)構(gòu)保持一段時間,因?yàn)楹瘮?shù)在整個作用域上擁有一個閉包。
內(nèi)容
平時編寫代碼的時候很少關(guān)注細(xì)節(jié),對javascript深層也沒具體了解,下面針對平時寫代碼的形式分析、調(diào)整完善自己的代碼,這里以一個簡單例子分析js作用域和垃圾回收機(jī)制,通過塊級作用域處理一些細(xì)節(jié),提升自己代碼性能。
普通案例在日常中最常見的代碼編寫方式:
function do(arg) { // 做一些事情 } var doFunc = {...} do(doFunc); var btn = document.getElementById( "my_button" ); btn.addEventListener( "click", function click(evt){ console.log("button clicked"); });
這樣編寫形式的代碼很多,很多時候在編寫的時候也沒留意這些問題,功能倒是能實(shí)現(xiàn),代碼量少的時候沒事,但是當(dāng)代碼量大,事關(guān)代碼性能,那就是兩碼事了。
簡單分析這里可以看到btn的點(diǎn)擊事件和doFunc根本沒什么關(guān)系。這意味著從理論上講,在 do(..) 運(yùn)行之后,這個消耗巨大內(nèi)存的數(shù)據(jù)結(jié)構(gòu)可以被作為垃圾回收。然而,JS引擎很可能(雖然這要看具體實(shí)現(xiàn))將會仍然將這個結(jié)構(gòu)保持一段時間,因?yàn)閏lick函數(shù)在整個作用域上擁有一個閉包。
處理方法在日常編寫代碼中巧用塊兒作用域可以解決這個問題,我們主動讓js引擎清楚的知道它不必要再保存doFunc。
function do(arg) { // 做一些事情 } { let doFunc = {...} do(doFunc); } var btn = document.getElementById( "my_button" ); btn.addEventListener( "click", function click(evt){ console.log("button clicked"); });
聲明可以將變量綁定在本地的明確的塊兒是一種強(qiáng)大的工具,結(jié)合自己的代碼,合理使用,一步步改善自己的代碼。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/96432.html
摘要:作用域分類作用域共有兩種主要的工作模型。換句話說,作用域鏈?zhǔn)腔谡{(diào)用棧的,而不是代碼中的作用域嵌套。詞法作用域詞法作用域中,又可分為全局作用域,函數(shù)作用域和塊級作用域。 一篇鞏固基礎(chǔ)的文章,也可能是一系列的文章,梳理知識的遺漏點(diǎn),同時也探究很多理所當(dāng)然的事情背后的原理。 為什么探究基礎(chǔ)?因?yàn)槟悴蝗ッ嬖嚹憔筒恢阑A(chǔ)有多重要,或者是說當(dāng)你的工作經(jīng)歷沒有亮點(diǎn)的時候,基礎(chǔ)就是檢驗(yàn)?zāi)愫脡牡囊豁?xiàng)...
摘要:關(guān)于循環(huán)和閉包當(dāng)循環(huán)和閉包結(jié)合在一起時,經(jīng)常會產(chǎn)生讓初學(xué)者覺得匪夷所思的問題。閉包是一把雙刃劍是比較難以理解和掌握的部分,它十分強(qiáng)大,卻也有很大的缺陷,如何使用它完全取決于你自己。 在談閉包之前,我們首先要了解幾個概念: 什么是函數(shù)表達(dá)式? 與函數(shù)聲明有何不同? JavaScript查找標(biāo)識符的機(jī)制 JavaScript的作用域是詞法作用域 JavaScript的垃圾回收機(jī)制 先來...
摘要:語句中的塊語句對來說,將會指定對象添加到作用域鏈中。在嚴(yán)格模式下,初始化未經(jīng)聲明的變量會導(dǎo)致錯誤。查詢標(biāo)識符搜索過程從作用域鏈的前端開始,向上逐級查詢與給定名字匹配的標(biāo)識符。 本文記錄了我在學(xué)習(xí)前端上的筆記,方便以后的復(fù)習(xí)和鞏固。 4.1基本類型和引用類型的值 ECMAScript變量可能包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值?;绢愋椭傅氖呛唵蔚臄?shù)據(jù)段,而引用類型值指那些可...
摘要:不是引用類型,無法輸出簡而言之,堆內(nèi)存存放引用值,棧內(nèi)存存放固定類型值。變量的查詢在變量的查詢中,訪問局部變量要比全局變量來得快,因此不需要向上搜索作用域鏈。 贊助我以寫出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 基本類型值有:undefined,NUll,Boolean,Number和String,這些類型分別在內(nèi)存中占有固定的大小空...
閱讀 3093·2021-10-19 11:46
閱讀 1042·2021-08-03 14:03
閱讀 3049·2021-06-11 18:08
閱讀 2984·2019-08-29 13:52
閱讀 2898·2019-08-29 12:49
閱讀 574·2019-08-26 13:56
閱讀 991·2019-08-26 13:41
閱讀 907·2019-08-26 13:35