日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaScript閉包的示例分析

小編給大家分享一下JavaScript閉包的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、臨桂網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5頁面制作、商城開發(fā)、集團公司官網(wǎng)建設、外貿網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為臨桂等各大城市提供網(wǎng)站開發(fā)制作服務。

閉包是JavaScript中的一個難點,同時也是它的特色,JavaScript的很多高級應用都要依靠閉包來實現(xiàn)。以下是我學習閉包的記錄,希望對你有些幫助。

變量作用域

在學習閉包之前,我們首先要理解JavaScript不同與其他語言獨特的變量作用域。在JavaScript中,不存在局部作用域的概念,但是有全局作用域以及函數(shù)作用域。全局作用域與其他語言的相同,沒有需要注意的地方,而函數(shù)作用域是指函數(shù)內部聲明的變量在函數(shù)外部無法直接訪問。

var a = 99;
function f1() {
  console.log(a);
}
f1();

上面的代碼中,f1可以讀取到全局變量a,而下面的代碼中a無法被訪問。

function f1() {
  var a = 99;
}
console.log(a);

如何從外部讀取函數(shù)內部聲明的變量?

在某些情況下,我們可能需要得到函數(shù)內部的變量,正常情況下是無法做到的,因此需要用特殊的辦法。

function f1() {
  var a = 99;
  function f2() {
    console.log(a);
  }
}

上面代碼中,我們在函數(shù)f1中定義另一個函數(shù)f2,這樣f1中的所有變量對于f2來說就是可見的,既然f2可以讀取到f1中的變量,那么我們只要把f2作為f1的返回值,我們就可以在f1的外部讀取到它內部的變量了。

function f1() {
  var a = 99;
  function f2() {
    console.log(a);
  }
  return f2;
}
var result = f1();
result();

此時,就形成了一個簡單的閉包。因此,閉包就可以簡單的理解為函數(shù)中的函數(shù),而本質上,閉包就是一個連接函數(shù)內部和外部的橋梁。

閉包的特性

閉包會使得函數(shù)中的變量都被保存到內存中。首先我們先看一下以下兩個例子

function A() {
  var count = 0;
  function B() {
    count++;
    console.log(count);
  }
  return B;
}
var C = A();
C(); // 1
C(); // 2
C(); // 3

count是函數(shù)A中的一個變量,它的值在函數(shù)B中被改變,函數(shù)B每執(zhí)行一次,count的值就在原來的基礎上累加1,因此,函數(shù)A中的count變量會一直保存在內存中。

function A(x) {
  function B(y) {
    console.log(x+y);
  }
return B;
}
var C = A(3);
C(5); //8

當3傳入A函數(shù)后,B函數(shù)就會記住這個值,所以在后面?zhèn)魅?的時候只會對B函數(shù)中的y賦值,所以最后會輸出8。

使用閉包的注意點

由于上述閉包的特性,每次使用閉包都會大量增加內存的消耗,所以不能濫用閉包,否則會影響網(wǎng)頁的性能。我們也可以在函數(shù)退出前,使函數(shù)內變量指向null來手動刪除變量。我們可以來看下一道經(jīng)典的面試題來理解。

function outer(){
  var num = 0; //內部變量
  return function add() { //通過return返回add函數(shù),就可以在outer函數(shù)外訪問了
    num++; //內部函數(shù)有引用,作為add函數(shù)的一部分了
    console.log(num);
  };
}
var func1 = outer();
func1(); //實際上是調用add函數(shù), 輸出1
func1(); //輸出2 因為outer函數(shù)內部的私有作用域會一直被占用
var func2 = outer();
func2(); // 輸出1 每次重新引用函數(shù)的時候,閉包是全新的。
func2(); // 輸出2

以上是“JavaScript閉包的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁標題:JavaScript閉包的示例分析
文章網(wǎng)址:http://www.dlmjj.cn/article/pjiigi.html