溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

js中閉包有什么特點(diǎn)

發(fā)布時間:2021-09-01 14:16:47 來源:億速云 閱讀:173 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)js中閉包有什么特點(diǎn)的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

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

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

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

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

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

舉例來說:

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

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

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

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

舉例來說:在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對象,調(diào)用person的方法,來達(dá)到修改和訪問name值的目的,類似于java類中的私有變量,外部無法訪問,只能通過類方法訪問。

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

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)訪問另一個函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個函數(shù)內(nèi)創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量。閉包的缺點(diǎn)就是常駐內(nèi)存,會增大內(nèi)存使用量,使用不當(dāng)很容易造成內(nèi)存泄露。

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

感謝各位的閱讀!關(guān)于“js中閉包有什么特點(diǎn)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)
推薦閱讀:
  1. JS閉包
  2. js閉包有什么用

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI