javascript的閉包的形成

來源:互聯網
上載者:User
  //例子1          var a = 10086;        function f1() {            alert(a);        }        f1(); //999    //例子2:函數內部變數聲明的時候,必須要用var  否則實際是聲明了一個全域變數         function f2() {            var b = 10086;        }        f2();        alert(b); //errer :b為定義               //例子3:例如c為全域變數         function f3() {            c = 10086;        }        f3();        alert(c);//        //==========================        //例子2情況 我們需要訪問b的值的時候怎麼辦呢        //這個時候f4內的所有變數對於getd都是可見的,但getd中的變數對f4卻不可見 ,這樣我們的f4函數就形成了閉包了。       //例子4         function f4() {            var d = 10000;            function getd() {                 alert(d);            }            return getd();        }        //        閉包的定義:簡單的可以理解為定義在函數內部的函數//        閉包的用途:讀取函數內部的變數,讓變數的值保持在記憶體中 //例子5        function f5() {            var n = 100086;            Add = function () { n += 1 };            function getn() {                alert(n);            }            return getn;        }       //這樣調用的時候不會出現閉包的情況          f5();//這裡輸出10086        Add();        f5();//10086        //用fun變數,形成閉包        var fun = f5();//使用fun指向getn        fun();        Add();        fun();        //當執行 var fun=f5() 時,變數fun實際指向了函數getn,getn中用到了變數n        //當函數f5內部的函數getn被函數a外部變數引用的時候,就建立了一個閉包         //閉包的作用:在a執行完後並返回,閉包由於變數n被外部參考,導致資源不會被回收,所以n始終存在,如果我們返回的不是getn,那麼n的值不會被調用,就會被回收

 

參考文章

揭開Javascript閉包的真實面目    

學習Javascript閉包(Closure)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.