最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript中閉包(Closure)詳解

 更新時間:2016年01月06日 08:39:51   投稿:hebedich  
閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高級應(yīng)用都要依靠閉包實現(xiàn)。小編之前一直糊里糊涂的,沒有能夠弄明白JavaScript的閉包到底是什么,有什么用,本文把自己的理解些出來分享一下,希望不理解JavaScript閉包的朋友們看了之后能夠理解閉包!

在javascript中,函數(shù)可看作是一種數(shù)據(jù),可以賦值給變量,可以嵌套在另一個函數(shù)中。

var fun = function(){
  console.log("平底斜");
}

function fun(){
  var n=10;
  function son(){
    n++;
  }
  son();
  console.log(n);
}
fun(); //11
fun(); //11

我們把上面第二段代碼稍微修改下:

var n=10;
function fun(){
  function son(){
    n++;
  }
  son();
  console.log(n);
}
fun(); //11
fun(); //12

看出差別了嗎,如果理解不了代碼執(zhí)行結(jié)果,請看上一篇博文,關(guān)于javascript作用域和作用域鏈的講解。

上面這段代碼中變量n是全局變量,隨時可能被重新賦值,而無需通過fun函數(shù)的調(diào)用。為了讓變量n不受污染,或者說是減少全局變量的污染,我們需要把n放到函數(shù)中作為局部變量。

function fun(){
  var n=10;
  function son(){
    n++;
    console.log(n);
  }
  son();
}
fun(); //11
fun(); //11

如果我們可以在全局中直接調(diào)用son函數(shù),那么便可以達成想要的效果。son函數(shù)現(xiàn)在是作為局部變量存在,要想在全局中訪問,一般有兩種方法:

一種是賦值給全局變量

var a;
function fun(){
  var n=10;
  a = function son(){
    n++;
    console.log(n);
  }
}
fun(); //son()
a(); //11
a(); //12

另一種是使用return返回值

function fun(){
  var n=10;
  return function son(){
    n++;
    console.log(n);
  }
}
var a=fun();
a(); //11
a(); //12

上面的son()函數(shù)就是閉包,某種意義上所有函數(shù)都可以看作閉包。閉包就是可以訪問外層函數(shù)作用域的變量的函數(shù)。

var a;
function fun(){
  var n=10;
  a = function son(){
    n++;
    console.log(n);
  }
  return a();
}
fun(); //11
a(); //12
a(); //13
fun(); //11
a(); //12
a(); //13

還是上面那段代碼,我們稍微修改下,再看看執(zhí)行結(jié)果,這是因為每次執(zhí)行fun()函數(shù)時都會初始化變量n。

閉包的好處是減少全局變量,避免全局污染,可以將局部變量保存在內(nèi)存中。但這既是優(yōu)點又是缺點,一段代碼中如果閉包過多,有可能造成內(nèi)存泄露。由于閉包中局部變量不會被垃圾回收機制回收,所以需要手動賦值為null(關(guān)于內(nèi)存泄露,后期單獨開專題)

相關(guān)文章

  • 關(guān)于微信小程序中使用wx.getLocation獲取當(dāng)前詳細位置并計算距離

    關(guān)于微信小程序中使用wx.getLocation獲取當(dāng)前詳細位置并計算距離

    這篇文章主要介紹了關(guān)于微信小程序中使用wx.getLocation獲取當(dāng)前詳細位置并計算距離,wx.getLocation只能夠獲取經(jīng)緯度,不能夠拿到詳細地址,這里使用騰訊地圖的api,需要的朋友可以參考下
    2023-04-04
  • JavaScript 繪制餅圖的示例

    JavaScript 繪制餅圖的示例

    這篇文章主要介紹了JavaScript 繪制餅圖的示例,幫助大家更好的利用JavaScript繪制圖表,感興趣的朋友可以了解下
    2021-02-02
  • 淺析JavaScript中嚴格模式的使用

    淺析JavaScript中嚴格模式的使用

    在ECMAScript5標準中,JavaScript提出了嚴格模式的概念(Strict Mode),本文就來和大家簡單講講JavaScript中嚴格模式的具體使用,感興趣的可以了解一下
    2023-05-05
  • 詳解javascript傳統(tǒng)方法實現(xiàn)異步校驗

    詳解javascript傳統(tǒng)方法實現(xiàn)異步校驗

    這篇文章主要為大家介紹了javascript實現(xiàn)異步校驗的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • webpack幾種手動實現(xiàn)HMR的方式

    webpack幾種手動實現(xiàn)HMR的方式

    眾所周知,在webpack中使用模塊熱替換(HMR),能夠使得應(yīng)用在運行時,本文就介紹一下如何實現(xiàn)HMR,感興趣的可以了解一下
    2021-07-07
  • JS中的進程和線程詳解

    JS中的進程和線程詳解

    進程和線程都是計算機中的概念,用于描述程序執(zhí)行時的運行單位。在 JavaScript 中,進程和線程的概念并不是直接暴露給開發(fā)者的,而是通過瀏覽器或 Node.js 等執(zhí)行環(huán)境來實現(xiàn)的,文中介紹的非常詳細,感興趣的同學(xué)可以閱讀一下
    2023-04-04
  • 原生JS實現(xiàn)百葉窗特效

    原生JS實現(xiàn)百葉窗特效

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)百葉窗特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JS+CSS實現(xiàn)網(wǎng)頁加載中的動畫效果

    JS+CSS實現(xiàn)網(wǎng)頁加載中的動畫效果

    這篇文章主要為大家詳細介紹了JS+CSS實現(xiàn)網(wǎng)頁加載中的動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • HBuilderX開發(fā)一個簡單的微信小程序的實現(xiàn)步驟

    HBuilderX開發(fā)一個簡單的微信小程序的實現(xiàn)步驟

    本文主要介紹了HBuilderX開發(fā)一個簡單的微信小程序的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • uniapp 封裝組件的方法實例分析

    uniapp 封裝組件的方法實例分析

    這篇文章主要介紹了uniapp 封裝組件的方法,結(jié)合實例形式分析了uniapp父級頁與子頁面組件封裝與傳參交互相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2023-06-06

最新評論

塘沽区| 抚松县| 玉门市| 宜君县| 饶阳县| 中阳县| 图片| 阿克苏市| 唐海县| 阳泉市| 雷波县| 宁国市| 松滋市| 庄浪县| 理塘县| 玉龙| 兰州市| 化德县| 沛县| 台北市| 胶州市| 济阳县| 佛学| 龙井市| 通榆县| 阳春市| 天长市| 隆昌县| 喀喇| 融水| 韶关市| 司法| 永平县| 调兵山市| 绥芬河市| 手游| 察隅县| 镇赉县| 茌平县| 呼玛县| 肇源县|