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

js閉包所用的場合以及優(yōu)缺點分析

 更新時間:2015年06月22日 09:48:34   投稿:hebedich  
這篇文章主要介紹了js閉包所用的場合以及優(yōu)缺點分析,十分的詳細使用,有需要的小伙伴可以參考下。

先上段代碼:

//函數a
function a()
{
var i=0;
//函數b
function b()
{
alert(++i);
}
return b;
}
//函數c
var c = a();
c();

代碼特點:

1、函數b嵌套在函數a內部;
2、函數a返回函數b。
代碼中函數a的內部函數b,被函數a外面的一個變量c引用的時候,這就叫創(chuàng)建了一個閉包。有時候函數b也可以用一個匿名函數代替來返回,即return function(){};

優(yōu)點:1.保護函數內的變量安全,加強了封裝性 2.在內存中維持一個變量(用的太多就變成了缺點,占內存)
閉包之所以會占用資源是當函數a執(zhí)行結束后, 變量i不會因為函數a的結束而銷毀, 因為b的執(zhí)行需要依賴a中的變量。
不適合場景:返回閉包的函數是個非常大的函數

閉包的典型框架應該就是jquery了。

閉包是javascript語言的一大特點,主要應用閉包場合主要是為了:設計私有的方法和變量。
這在做框架的時候體現更明顯,有些方法和屬性只是運算邏輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法獲取。

閉包的缺點就是常駐內存,會增大內存使用量,使用不當很容易造成內存泄露。

總結一下:

優(yōu)點:

1. 邏輯連續(xù),當閉包作為另一個函數調用的參數時,避免你脫離當前邏輯而單獨編寫額外邏輯。
2. 方便調用上下文的局部變量。
3. 加強封裝性,第2點的延伸,可以達到對變量的保護作用。

缺點:

閉包有一個非常嚴重的問題,那就是內存浪費問題,這個內存浪費不僅僅因為它常駐內存,更重要的是,對閉包的使用不當會造成無效內存的產生,看下面的例子:

var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}

alert(array[0] == array[1]);

通過上面的測試我們會看到這一萬次abc()執(zhí)行所產生的同一個邏輯的閉包的地址并不相同,也就是說它生產了一堆的一模一樣的Function對象,這樣有好處就是可以以工廠模式產生函數以備使用,然而如果你的稍有不慎將閉包當做常態(tài)邏輯使用,就不可避免的會造成內存垃圾。當中換個語法可能更好理解:

var foo = new Function();

所以關于閉包,就我自己的習慣而言,能不用就不用,如果非用不可,那就想辦法保持閉包對象的數量很少甚至唯一。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

相關文章

  • JavaScript使用Promise實現并發(fā)請求數限制

    JavaScript使用Promise實現并發(fā)請求數限制

    本文主要介紹了JavaScript使用Promise實現并發(fā)請求數限制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • javascript實現捕捉鍵盤上按下的鍵

    javascript實現捕捉鍵盤上按下的鍵

    JavaScript取得按下鍵盤的鍵是哪個,通過創(chuàng)建一個event.keyCode對象,可有效獲取鍵盤上的鍵,運行代碼后,點擊鍵盤上的任意鍵,網頁上顯示你按下的是哪個鍵。
    2015-05-05
  • 重學JS之顯示強制類型轉換詳解

    重學JS之顯示強制類型轉換詳解

    這篇文章主要給大家介紹了關于重學JS之顯示強制類型轉換的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JS具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • viewer.js一個強大的基于jQuery的圖像查看插件(支持旋轉、縮放)

    viewer.js一個強大的基于jQuery的圖像查看插件(支持旋轉、縮放)

    這篇文章主要介紹了Viewer這一款強大的 jQuery 圖像瀏覽插件,在信息詳情頁面實現點擊圖片可以預覽,腳本之家也是用的這個js,這里為分享一下使用方法,需要的朋友可以參考下
    2020-04-04
  • JavaScript變量Dom對象的所有屬性

    JavaScript變量Dom對象的所有屬性

    這篇文章主要介紹了JavaScript變量Dom對象的所有屬性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 原生JS:Date對象全面解析

    原生JS:Date對象全面解析

    下面小編就為大家?guī)硪黄鶭S:Date對象全面解析。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • javascript中checkbox使用方法實例演示

    javascript中checkbox使用方法實例演示

    這篇文章通過簡單的實例演示了javascript中checkbox使用方法,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 如何用js將blob為pcm格式轉換為MP3格式

    如何用js將blob為pcm格式轉換為MP3格式

    要將PCM文件轉換為MP3文件,您可以使用Js實現,這篇文章主要給大家介紹了關于如何用js將blob為pcm格式轉換為MP3格式的相關資料,需要的朋友可以參考下
    2023-11-11
  • Bootstrap~多級導航(級聯導航)的實現效果【附代碼】

    Bootstrap~多級導航(級聯導航)的實現效果【附代碼】

    下面小編就為大家分享一篇Bootstrap~多級導航(級聯導航)的實現效果【附代碼】。小編覺得挺不錯。希望對大家有所幫助。一起跟隨小編過來看看吧
    2016-03-03
  • JavaScript實現添加及刪除事件的方法小結

    JavaScript實現添加及刪除事件的方法小結

    這篇文章主要介紹了JavaScript實現添加及刪除事件的方法,實例總結了javascript對事件的添加及刪除的技巧,涉及javascript事件綁定的方法及瀏覽器兼容的相關注意事項,需要的朋友可以參考下
    2015-08-08

最新評論

巫山县| 镇平县| 饶平县| 武穴市| 明水县| 中宁县| 电白县| 海安县| 新绛县| 朝阳区| 图们市| 通榆县| 蒙自县| 宽城| 视频| 肇庆市| 陇川县| 晋宁县| 九江县| 汤原县| 会泽县| 凤城市| 舒城县| 顺平县| 安阳市| 浦江县| 宁武县| 嵩明县| 晴隆县| 文成县| 名山县| 元江| 宕昌县| 宜城市| 河曲县| 永修县| 江北区| 三原县| 杭州市| 清流县| 宣威市|