淺談javascript的閉包,淺談javascript

來源:互聯網
上載者:User

淺談javascript的閉包,淺談javascript

關於閉包的解釋

我們將範圍鏈描述為一個對象列表,不是綁定的棧。每次調用javascript函數的時候,都會為之建立一個新的對象來儲存變數,把這個對象添那個加至範圍中,當函數返回時,就從範圍鏈中將這個綁定變數的對象刪除,如果不存在嵌套函數,也沒有其他引用指向這個綁定的對象,它就會被當記憶體回收掉,

  (function () {  var val = null;  var callback;  setTimeout(function () {   val = 1;   callback(val)  },1000)  window.getVal = function(fn){   callback = fn;  } })(); (function(){  var b =3;  getVal(function (val) {   console.log(val);//1   console.log(b); //3  getVal(function (val) {  console.log(val);  console.log(b);  //這裡為什麼還能列印出b這個變數呢/.  }); //這裡匿名函數其實就是一個閉包,你就相當於通過getVal函數把這個閉包傳遞出去了,你想想看,閉包是不是這樣?})();//2範圍 (function(){  var b =3;  var ret = function (val) {   console.log(val);

利用閉包實現的私人屬性存取方法

  function c            return {   count:function(){   return n++;   }   };   } var a=counter(); alert(a.count());//返回的0; alert(a.count());//返回的是1;

定義的閉包實現的私人屬性方法

function addPrivateProperty(o,name,predicate){var value;o["get"+name]=function(){return value);}//get 存取器的屬性唯讀,將其直接簡單的返回//setter方法檢驗值是否合法,若不合法就拋出異常o["set"+name]=function(v){{if(predicate&&!predicate(v)) throw Error("");else {value=v;}}

典型錯誤

function constfuncs(){var funcs=[];for(var i=0;i<10;i++){funcs[i]=function(){return i;};}return funcs;}var func=constfuncs();console.log(func[5]());;//傳回值? 10

由於此函數的閉包都是在同一個函數調用中定義的,因此可以共用變數i;

關聯到閉包的範圍鏈都是活動的,嵌套的函數不會將範圍內的私人成員複製一份,也不會對所綁定的變數產生靜態快照;在閉包時後this是javascript的一個關鍵字而不是變數

解決辦法

function Bb(){this.run=function(){}//this就是Bb這個對象;}而function run(){function gg(){alert(this就是window)}//this就是window;`}

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,同時也希望多多支援幫客之家!

聯繫我們

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