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

首頁 > 編程 > JavaScript > 正文

淺談js閉包理解

2019-11-19 11:54:37
字體:
供稿:網(wǎng)友

閉包是js中的一大特色,也是一大難點(diǎn)。簡(jiǎn)單來說,所謂閉包就是說,一個(gè)函數(shù)能夠訪問其函數(shù)外部作用域中的變量。

閉包的三大特點(diǎn)為:

1、函數(shù)嵌套函數(shù)

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

3、參數(shù)和變量不會(huì)被回收。

舉例來說:

function test(){   var a=1;   return function(){    alert(a);   }  }  var try=test();  try();//彈出a的值

這個(gè)例子中,變量a在test方法外部是無法訪問的,但test方法里面,嵌套了一個(gè)匿名函數(shù),通過return返回,test作用域中的變量a,

可以在匿名函數(shù)中訪問。并且當(dāng)test方法執(zhí)行后,變量a所占內(nèi)存并不會(huì)釋放,以達(dá)到嵌套的函數(shù)還可以訪問的目的。

閉包的作用在于,可以通過閉包,設(shè)計(jì)私有變量及方法。

舉例來說:在java中創(chuàng)建perosn類,含有私有變量name。

public class Person{  private String name='wy';  public Person(val){    name=val;  }  public void setName(val){    name=val;  }  public String getName(){   return name;  }}

在js中實(shí)現(xiàn)類似java創(chuàng)建類的功能:

(function(){      var name="wangyu";      Person=function (val) {        name=val;      }      Person.prototype.setName=function(val){        name=val;      }      Person.prototype.getName=function () {        return name;      }    })();   var person1=new Person("sj");   alert(this.name)//undefined 因?yàn)樵趂unction作用域外不能訪問   alert(person1.getName());//sj

在function里面的name,由于是在function作用域中,所以外部無法訪問,但是可以通過創(chuàng)建person對(duì)象,調(diào)用person的方法,來達(dá)到修改和訪問name值的目的,類似于java類中的私有變量,外部無法訪問,只能通過類方法訪問。

再看一個(gè)私有變量的例子:

var aaa = (function(){    var a = 1;    function bbb(){        a++;        alert(a);    }    function ccc(){        a++;        alert(a);    }    return {        b:bbb,       //json結(jié)構(gòu)        c:ccc    }  })();  alert(aaa.a)//undefined   aaa.b();   //2  aaa.c()   //3

總結(jié):

1、閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個(gè)函數(shù)內(nèi)創(chuàng)建另一個(gè)函數(shù),通過另一個(gè)函數(shù)訪問這個(gè)函數(shù)的局部變量。閉包的缺點(diǎn)就是常駐內(nèi)存,會(huì)增大內(nèi)存使用量,使用不當(dāng)很容易造成內(nèi)存泄露。

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

以上所述是小編給大家介紹的js閉包理解詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仪陇县| 会昌县| 酒泉市| 栾城县| 乌拉特后旗| 洪洞县| 姚安县| 阳城县| 钟山县| 秦安县| 页游| 桐乡市| 沁阳市| 雷州市| 册亨县| 陇川县| 广昌县| 历史| 濮阳县| 敦煌市| 曲阜市| 绥化市| 靖边县| 宿州市| 临桂县| 斗六市| 交城县| 舒兰市| 湛江市| 新乡县| 齐河县| 清远市| 什邡市| 长寿区| 潮安县| 资兴市| 高邑县| 仪陇县| 云林县| 天祝| 赞皇县|