亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談js閉包理解

 更新時間:2019年03月28日 15:32:38   作者:yujin0222  
這篇文章主要介紹了對js閉包理解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

閉包是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方法執(zhí)行后,變量a所占內存并不會釋放,以達到嵌套的函數還可以訪問的目的。

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

舉例來說:在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中實現類似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 因為在function作用域外不能訪問
  alert(person1.getName());//sj

在function里面的name,由于是在function作用域中,所以外部無法訪問,但是可以通過創(chuàng)建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、閉包是指有權訪問另一個函數作用域中的變量的函數,創(chuàng)建閉包的最常見的方式就是在一個函數內創(chuàng)建另一個函數,通過另一個函數訪問這個函數的局部變量。閉包的缺點就是常駐內存,會增大內存使用量,使用不當很容易造成內存泄露。

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

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

  • 微信小程序實現蒙版彈窗效果

    微信小程序實現蒙版彈窗效果

    這篇文章主要為大家詳細介紹了微信小程序實現蒙版彈窗效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 微信小程序使用Promise簡化回調

    微信小程序使用Promise簡化回調

    本篇文章主要介紹了微信小程序使用Promise簡化回調,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • javascript中call和apply的用法示例分析

    javascript中call和apply的用法示例分析

    這篇文章主要介紹了javascript中call和apply的用法示例分析,非常的詳細,需要的朋友可以參考下
    2015-04-04
  • JavaScript中SQL語句的應用實現

    JavaScript中SQL語句的應用實現

    最近一直在用javascript在做項目 可是做著做著 感覺很多功能代碼都是重復的。
    2010-05-05
  • js css3實現圖片拖拽效果

    js css3實現圖片拖拽效果

    這篇文章主要為大家詳細介紹了js css3實現圖片拖拽效果,注釋非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 使用bootstrap-paginator.js 分頁來進行ajax 異步分頁請求示例

    使用bootstrap-paginator.js 分頁來進行ajax 異步分頁請求示例

    本篇文章主要介紹了使用bootstrap-paginator.js 分頁來進行ajax 異步分頁請求示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • layer實現彈出層自動調節(jié)位置

    layer實現彈出層自動調節(jié)位置

    今天小編就為大家分享一篇layer實現彈出層自動調節(jié)位置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • javascript 自定義事件初探

    javascript 自定義事件初探

    "事件機制可以使程序邏輯更加符合現實世界,在JavaScript 中很多對象都有自己的事件,例如按鈕就有onclick 事件,下拉列表框就有onchange 事件,通過這些事件可以方便編程。
    2009-08-08
  • JS利用prototype給類添加方法操作詳解

    JS利用prototype給類添加方法操作詳解

    這篇文章主要介紹了JS利用prototype給類添加方法操作,結合實例形式分析了javascript使用prototype實現給類添加方法的相關操作技巧,需要的朋友可以參考下
    2019-06-06
  • 最新評論