国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談javascript的閉包

2019-11-19 17:47:48
字體:
來源:轉載
供稿:網友

關于閉包的解釋

我們將作用域鏈描述為一個對象列表,不是綁定的棧。每次調用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;`}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呼伦贝尔市| 尼木县| 庆城县| 吉林市| 普兰店市| 兴安盟| 承德县| 额敏县| 军事| 康保县| 四平市| 定陶县| 大名县| 汉沽区| 台东市| 凉城县| 昌黎县| 石棉县| 鹤庆县| 十堰市| 潞西市| 凤山市| 涟水县| 济阳县| 南充市| 攀枝花市| 郧西县| 寻乌县| 柳江县| 丽江市| 阳春市| 大关县| 德阳市| 谷城县| 宜兰县| 江川县| 辽中县| 广水市| 五大连池市| 普陀区| 建湖县|