<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • Js閉包

          2020-3-3    前端達人

          所謂閉包就是說,閉包是指有權訪問另外一個函數作用域中的變量的函數.可以理解為(能夠讀取其他函數內部變量的函數)

          閉包的三大特點為(既是優點,也是缺點):

          1,函數作用域空間不會被銷毀

          優點是:空間中的內容,永遠存在

          缺點是:占用大量的內存空間

          2,可以從外部訪問函數內部的變量

          優點是:使用變量數據方便

          缺點是:容易泄露數據信息

          3,保護私有作用域變量

          優點是:確保私有作用域變量一直存在

          缺點是:占用內存空間 閉包的最大問題是:有可能造成占用大量的內存空間,降低程序的執行效率,甚至有可能造成數據溢出或者是數據泄露 因為為了保護數據的安全性,特殊情況下,才會使用閉包舉例來說:

          // 記數器:



          //全局變量  全局變量降低函數的獨立性

          1

          // var count = 0;

          // function add(){

          // return count++;

          // }

          // console.log(add());

          // console.log(add());

          // console.log(add());



          //局部變量  函數執行外  局部變量銷毀

          1

          // function add(){

          // var count = 0;

          // return count++;

          // }

          // console.log(add());

          // console.log(add());

          // console.log(add());



          //plus定義在add的內部,可以訪問add局部變量count

          //f為一個全局變量,通過賦值后,成為add的返回值,也就是plus方法

          //訪問到了add中的局部變量count

          //所以count雖然是局部變量,但不允許被銷毀,plus就是閉包

          1

          2

          3

          4

          // function add(){

          // var count = 0;

          // function plus(){

          // return count++;

          // }

          // return plus;

          // }

          //

          // var f = add();

          //

          // console.log(f());

          // console.log(f());

          // console.log(f());



          //變身

          1

          // function add(){

          // var count = 0;

          // return function(){

          // return count++;

          // }

          // }

          //

          // var f = add();

          //

          // console.log(f());

          // console.log(f());

          // console.log(f());



          //繼續變身

          1

          // var f = (function (){

          // var count = 0;

          // return function(){

          // return count++;

          // }

          // }());

          //

          // console.log(f());

          // console.log(f());

          // console.log(f());

          //JS中,沒有塊作用域,但是在閉包的寫法里,可以體現出來。

          function outerFunc(){

          var outVar = 10;

          var innerF = function (){

          var innerVar = 20;//該變量雖然隸屬于outerFunc內部,但是它的作用域范圍只在innerF對應的函數體內,屬于塊級作用域

          }

          alert(innerVar);

          return innerF;

          }



          閉包的作用:

          正常函數執行完畢后,里面聲明的變量被垃圾回收處理掉,但是閉包可以讓作用域里的 變量,在函數執行完之后依舊保持沒有被垃圾回收處理掉



          可以讀取函數內部的變量

          讓這些變量的值始終保持在內存中。

          增加塊級作用域

          總結:

          1、 閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的最常見的方式就是在一個函數內創建另一個函數,通過另一個函數訪問這個函數的局部變量。

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

          3、不必糾結到底怎樣才算閉包,其實你寫的每一個函數都算作閉包,即使是全局函數,你訪問函數外部的全局變量時,就是閉包的體現。







          ————————————————

          版權聲明:本文為CSDN博主「澈野」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

          原文鏈接:https://blog.csdn.net/fie_ld/article/details/104595753

          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.sdgs6788.com

          存檔

          四虎国产精品免费久久5151| 亚洲伊人久久成综合人影院| 久久久久99精品成人片试看| 久久精品国产亚洲综合色| 国产福利电影一区二区三区久久老子无码午夜伦不 | 日韩精品久久久久久久电影蜜臀| 狠狠色综合网站久久久久久久高清| 精品国产一区二区三区久久| 香蕉久久夜色精品国产2020 | 久久亚洲国产成人影院网站| 久久人妻少妇嫩草AV无码专区| 99久久精品国产一区二区三区| 一本一本久久A久久综合精品 | 中文字幕久久精品无码| 国产精品青草久久久久福利99| 久久精品国产亚洲AV嫖农村妇女| 久久久久久国产精品美女| 99国产精品久久久久久久成人热| 久久精品无码一区二区WWW| 久久久久99精品成人片| 九九99精品久久久久久| 国产婷婷成人久久Av免费高清| 久久人人爽人人爽人人片AV麻烦| 久久免费视频一区| 久久青青草原亚洲av无码| 亚洲一区二区三区日本久久九| 69久久精品无码一区二区| 97久久超碰国产精品2021| 久久久久久久精品成人热色戒| 无码人妻久久一区二区三区蜜桃| 久久亚洲国产精品123区| 久久久久综合中文字幕| 久久综合九色综合欧美就去吻| 久久久久久久久久久免费精品 | 国产精品熟女福利久久AV| 日本久久久精品中文字幕| 色综合久久综合网观看| 精品久久久久久无码中文字幕| 久久人人爽人人精品视频| 久久无码精品一区二区三区| 色播久久人人爽人人爽人人片AV|