国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

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

2019-11-02 15:47:11
字體:
來源:轉載
供稿:網(wǎng)友

   這篇文章主要介紹了js閉包所用的場合以及優(yōu)缺點分析,十分的詳細使用,有需要的小伙伴可以參考下。

  先上段代碼:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 //函數(shù)a function a() { var i=0; //函數(shù)b function b() { alert(++i); } return b; } //函數(shù)c var c = a(); c();

  代碼特點:

  1、函數(shù)b嵌套在函數(shù)a內部;

  2、函數(shù)a返回函數(shù)b。

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

  優(yōu)點:1.保護函數(shù)內的變量安全,加強了封裝性 2.在內存中維持一個變量(用的太多就變成了缺點,占內存)

  閉包之所以會占用資源是當函數(shù)a執(zhí)行結束后, 變量i不會因為函數(shù)a的結束而銷毀, 因為b的執(zhí)行需要依賴a中的變量。

  不適合場景:返回閉包的函數(shù)是個非常大的函數(shù)

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

  閉包是javascript語言的一大特點,主要應用閉包場合主要是為了:設計私有的方法和變量。

  這在做框架的時候體現(xiàn)更明顯,有些方法和屬性只是運算邏

英文網(wǎng)名[www.la240.com/html2017/1/37/]
輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法獲取。

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

  總結一下:

  優(yōu)點:

  1. 邏輯連續(xù),當閉包作為另一個函數(shù)調用的參數(shù)時,避免你脫離當前邏輯而單獨編寫額外邏輯。

  2. 方便調用上下文的局部變量。

  3. 加強封裝性,第2點的延伸,可以達到對變量的保護作用。

  缺點:

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

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 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對象,這樣有好處就是可以以工廠模式產生函數(shù)以備使用,然而如果你的稍有不慎將閉包當做常態(tài)邏輯使用,就不可避免的會造成內存垃圾。當中換個語法可能更好理解:

  ?

1 var foo = new Function();
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄂州市| 临潭县| 平邑县| 临潭县| 南安市| 莒南县| 榆树市| 陇南市| 启东市| 丹东市| 惠州市| 吉林省| 建水县| 珲春市| 无极县| 信宜市| 比如县| 嘉祥县| 肃南| 衡山县| 信阳市| 浦北县| 都匀市| 敖汉旗| 商洛市| 固阳县| 南华县| 霍邱县| 德昌县| 甘肃省| 苏尼特右旗| 西宁市| 隆尧县| 桦川县| 泗阳县| 察哈| 盐亭县| 桂东县| 泸西县| 左云县| 蓬莱市|