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

首頁 > 編程 > JavaScript > 正文

淺談js閉包理解

2019-11-19 11:55:35
字體:
來源:轉載
供稿:網友

閉包是js中的一大特色,也是一大難點。簡單來說,所謂閉包就是說,一個函數能夠訪問其函數外部作用域中的變量。

閉包的三大特點為:

1、函數嵌套函數

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

3、參數和變量不會被回收。

舉例來說:

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

這個例子中,變量a在test方法外部是無法訪問的,但test方法里面,嵌套了一個匿名函數,通過return返回,test作用域中的變量a,可以在匿名函數中訪問。并且當test方法執行后,變量a所占內存并不會釋放,以達到嵌套的函數還可以訪問的目的。

閉包的作用在于,可以通過閉包,設計私有變量及方法。

舉例來說:在java中創建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中實現類似java創建類的功能:

(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 因為在function作用域外不能訪問  alert(person1.getName());//sj

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

再看一個私有變量的例子:

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

總結:

1、閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的最常見的方式就是在一個函數內創建另一個函數,通過另一個函數訪問這個函數的局部變量。閉包的缺點就是常駐內存,會增大內存使用量,使用不當很容易造成內存泄露。

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

以上所述是小編給大家介紹的對js閉包理解和動畫詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北碚区| 宁陕县| 云阳县| 迁西县| 荣昌县| 梁山县| 天津市| 聂荣县| 靖宇县| 灵宝市| 嵩明县| 都江堰市| 三都| 赤峰市| 富阳市| 惠安县| 松江区| 阿克陶县| 枣庄市| 响水县| 屯门区| 托克逊县| 崇文区| 天峨县| 邢台市| 乐陵市| 抚顺市| 平舆县| 澄城县| 上林县| 剑河县| 柳江县| 黄梅县| 平凉市| 祁连县| 南丰县| 新化县| 沙洋县| 镇原县| 武川县| 新和县|