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

首頁 > 網站 > WEB開發 > 正文

透過幾行代碼看閉包

2024-04-27 15:04:54
字體:
來源:轉載
供稿:網友

先看著幾行代碼:

'use strict';function autoInc(init){ let x=init||0; return{ inc:function(){ x+=1; return x; } }}

常識:

1 javaScript作用域 是”鏈式作用域”結構(chain scope),子對象會一級一級地向上尋找所有父對象的變量。因此鍵為inc的值:即匿名函數

function(){ x+=1; return x; }

中的x會向上尋找父對象autoInc函數對象中的x,找到。

2 autoInc函數對象返回值

對于剛接觸Javascript的小伙伴,很容易發蒙,不知道autoInc的返回值是x,還是匿名函數。其實,autoInc函數對象的返回值是一個對象

{inc: function{...}} //這是JS特有的object類型

因此調用autoInc(8)的作用:此函數變量x內部賦值為8,并且返回這么一個對象{inc:function(){…}}

let fun = autoInc(8);

3 閉包慎用 調用autoInc(8)完后,變量x在內存中會立即釋放嗎? 不會的。這就是閉包,因為fun對象,inc的鍵值,也就是這個匿名函數,在1中提到了,匿名函數用到了父函數autoInc中的定義的x了。這個匿名函數就是一個閉包

因此閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。

運用這個閉包:

let num = fun.inc(); //此時調用匿名函數,并且返回一個Number變量,為9

為什么為9,因為變量x未在內存中立即釋放,fun.inc()調用前,x的值還是8!

由此看見,調用閉包,改變父函數內部變量x的值。

所以,閉包可以看做是父函數autoInc對象的公用方法(Public Method),內部變量x可以看做是父函數autoInc的私有屬性(PRivate value)。

你們覺得呢?


上一篇:web.xml配置詳解

下一篇:css偽類

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保康县| 大关县| 上蔡县| 桃园市| 盱眙县| 抚松县| 新平| 新乡市| 庐江县| 台北县| 原平市| 丹巴县| 磴口县| 行唐县| 香港 | 临潭县| 东平县| 彰化市| 海南省| 瓦房店市| 柏乡县| 方城县| 邹城市| 丰城市| 宁武县| 万源市| 耒阳市| 铜鼓县| 鹤峰县| 麻栗坡县| 全州县| 德钦县| 咸丰县| 武城县| 利辛县| 保亭| 绥滨县| 阿坝县| 吴川市| 五常市| 苗栗县|