javascript匿名函數與閉包

來源:互聯網
上載者:User

標籤:logs   etc   回收   hello   說明   nbsp   etag   tag   java   

匿名函數是相對於有名字的函數

如function setAge(){}函數名為setAge

而類似於function(){}則就是一個匿名函數

有名字的函數執行時可以寫成setAge(),而沒有名字的函數則執行要寫成(function())();

另一種方式是把匿名函數賦值給一個變數來使用

var a=function(){alert("hello,world");}a();

匿名函數傳參

(function(age){return age;})(100);

匿名函數產生閉包

閉包簡單來說就是一個函數裡面還有函數(一般來說是匿名函數),看代碼:

function box(){var a=10;return function(){alert("hello") }}
box()//返回function(){ alert("hello") }一串代碼
box()()//再加一個()才執行了匿名函數,返回hello

關於閉包解釋,上面的說明太粗俗了,下面具體說明

有權訪問另一個函數範圍內變數的函數都是閉包

閉包源於js範圍鏈問題,在js中局部變數可以直接存取全域變數,而全域變數無法訪問局部變數

function box(){
var a=10;

}

alert(a)//未定義,全域無法訪問函數體內的var a=10變數,但有時我們需要外部能夠取得這個局部的a變數,這時我們怎麼做呢?閉包方式來了

利用js中局部變數可以直接存取全域變數,而全域變數無法訪問局部變數這一原理,我們在box(){}內再構建一個函數,這事var a對於這個新構建的函數來說就是他的“全域變數”

例如

function getCircle(){var pi=3.1415926;//局部變數,怎樣要外面的alert取得pi呢return function (){//寫一個函數,這個函數可以取得pi的值  return pi;//這個pi值一旦調用getCircle()就可以return出匿名函數裡的這個pi}}alert(getCircle()());

使用閉包的好處有什嗎?

在js中一旦function執行完畢,裡面的變數都會被記憶體回收,被銷毀,可以這樣理解,js中局部變數優先於全域變數執行,函數體執行完畢後,就被銷毀,所以全域變數就無法訪問局部了。在一些情形中,我們需要將局部變數儲存下來,我們就要用到閉包了。

總結:閉包好處:

一個是前面提到的可以讀取函數內部的變數,另一個就是讓這些變數的值始終保持在記憶體中。 

function box(){var a=0;return function(){    a=a+1;return a;}}var b=box();b();//1b();//2

每次執行一次b() var a都不會清零,而是保留了上次的結果!

 

javascript匿名函數與閉包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.