談?wù)剬S基礎(chǔ)(閉包)的理解

? ? ? ? ? ? ? 概括:閉包就是一個函數(shù),捕獲作用域內(nèi)的外部綁定.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? 官方定義:一個擁有許多變量和綁定了這些變量環(huán)境的表達式(通常是一個函數(shù)),因為這些變量也稱為了這表達式的一部分(閉包實現(xiàn)了全局變量的累加? 模塊化的代碼? 減少了全局變量的污染)。

? ? ? ? 自由變量和閉包的關(guān)系:自由變量閉合于閉包的創(chuàng)建。

? ? ? ? 自由變量:如果一個函數(shù)內(nèi)部有其他函數(shù),那么這些內(nèi)部函數(shù)就可以訪問外部函數(shù)中聲明的變量(這些變量就稱之為自由變量).

? ? 高階函數(shù):返回另一個函數(shù)的函數(shù)成為高階函數(shù)。

? ? ? ? ? 閉包的優(yōu)點:? 1.希望一個變量可以長期駐扎在內(nèi)存中

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.避免全局變量的污染

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.私有成員的存在

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.私有成員的存在

? ? ? ? 閉包的缺點? ? :1.是常駐內(nèi)存

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.會增大內(nèi)存的使用量,使用不當很容易造成內(nèi)容泄露


? ? ? 例:? ? function fn(){


? ? ? ? ? ? ? ? ? ? var a=10;

? ? ? ? ? ? ? ? function f1(){

? ? ? ? ? ? ? ? ? ? ? ? ? a++;

? ? ? ? ? ? ? console.log(a);

? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? return f1;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? var f=fn();

? ? ? ? ? ? ? f();

? ? ? ? ? ? ? f();

? ? ? ? ? ? ? f();

? ? ? ? ? 閉包的特性: 1.函數(shù)嵌套函數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.函數(shù)內(nèi)部可以引入外部的參數(shù)和變量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.參數(shù)和變量不會被垃圾機制回收

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高級應(yīng)用都要依靠閉包實現(xiàn)。 一、變量...
    zock閱讀 1,117評論 2 6
  • 閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高級應(yīng)用都要依靠閉包實現(xiàn)。 一、變量...
    zouCode閱讀 1,357評論 0 13
  • 前言 有很多人搞不清匿名函數(shù)和閉包這兩個概念,經(jīng)?;煊谩i]包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。匿名函數(shù)就...
    cduyzh閱讀 637評論 3 7
  • 作用域和閉包是 JavaScript 最重要的概念之一,想要進一步學(xué)習(xí) JavaScript,就必須理解 Java...
    劼哥stone閱讀 1,240評論 1 13
  • 時常覺得心煩 不想聽任何人的意見 不是因為固執(zhí) 任性 只是不想用別人的想法過完這一生 而我 會對自己負責(zé)到底 對...
    郭郭麗雪閱讀 114評論 0 0

友情鏈接更多精彩內(nèi)容