<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • Js閉包

    2020-3-3    前端達人

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

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

    1,函數(shù)作用域空間不會被銷毀

    優(yōu)點是:空間中的內(nèi)容,永遠存在

    缺點是:占用大量的內(nèi)存空間

    2,可以從外部訪問函數(shù)內(nèi)部的變量

    優(yōu)點是:使用變量數(shù)據(jù)方便

    缺點是:容易泄露數(shù)據(jù)信息

    3,保護私有作用域變量

    優(yōu)點是:確保私有作用域變量一直存在

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

    // 記數(shù)器:



    //全局變量  全局變量降低函數(shù)的獨立性

    1

    // var count = 0;

    // function add(){

    // return count++;

    // }

    // console.log(add());

    // console.log(add());

    // console.log(add());



    //局部變量  函數(shù)執(zhí)行外  局部變量銷毀

    1

    // function add(){

    // var count = 0;

    // return count++;

    // }

    // console.log(add());

    // console.log(add());

    // console.log(add());



    //plus定義在add的內(nèi)部,可以訪問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());



    //繼續(xù)變身

    1

    // var f = (function (){

    // var count = 0;

    // return function(){

    // return count++;

    // }

    // }());

    //

    // console.log(f());

    // console.log(f());

    // console.log(f());

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

    function outerFunc(){

    var outVar = 10;

    var innerF = function (){

    var innerVar = 20;//該變量雖然隸屬于outerFunc內(nèi)部,但是它的作用域范圍只在innerF對應(yīng)的函數(shù)體內(nèi),屬于塊級作用域

    }

    alert(innerVar);

    return innerF;

    }



    閉包的作用:

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



    可以讀取函數(shù)內(nèi)部的變量

    讓這些變量的值始終保持在內(nèi)存中。

    增加塊級作用域

    總結(jié):

    1、 閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個函數(shù)內(nèi)創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量。

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

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







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

    版權(quán)聲明:本文為CSDN博主「澈野」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

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

    日歷

    鏈接

    個人資料

    藍藍設(shè)計的小編 http://www.skdbbs.com

    存檔

    主站蜘蛛池模板: 国产精品久线在线观看| 国产成人精品男人的天堂538| 久久99热只有频精品8| 精品99又大又爽又硬少妇毛片| 成人国产精品免费视频| 伊人精品视频在线| 久久99精品久久久久久齐齐| 你懂的国产精品| 国产精品亚洲精品日韩已满| 亚洲精品无码激情AV| 成人免费精品网站在线观看影片 | 无码日韩精品一区二区三区免费| 国产亚洲午夜高清国产拍精品| 日韩精品在线看| 国内精品伊人久久久久| 国产精品日韩欧美一区二区三区| 亚洲AV无码久久精品成人| 亚洲日韩中文在线精品第一| 欧美国产精品va在线观看| 精品久久久久久国产三级| 99久久夜色精品国产网站| 亚洲综合精品香蕉久久网97| 免费欧美精品a在线| 欧美亚洲精品在线| 亚洲精品私拍国产福利在线| 久久国产精品成人免费| 国产精品网址你懂的| 98视频精品全部国产| 2020国产精品永久在线| 99久久这里只有精品| 99精品视频免费| 国产原创精品视频| 久久亚洲精品视频| 色综合久久精品中文字幕首页| 日本精品中文字幕| 久久久久夜夜夜精品国产| 久久精品男人影院| 欧美一卡2卡3卡四卡海外精品| 欧美精品一本久久男人的天堂| 精品国产污污免费网站| 四虎国产精品免费入口|