中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript閉包淺析

發布時間:2020-06-27 21:08:41 來源:網絡 閱讀:222 作者:eflypro小普 欄目:web開發

什么是閉包

根據官方語言解釋:一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。
按照我的理解:但是你只需要知道應用的兩種情況即可——函數作為返回值,函數作為參數傳遞。理解了這兩種情況,你基本上知道閉包是怎么回事了;
解說一下:
通常來說,JS里面當一個函數被調用完成之后,window會自動將這個函數的作用域給銷毀掉,這個作用域里面的變量也隨之被銷毀,這個是瀏覽器的自動垃圾回收機制,但是有些時候,一個函數被叼用完成之后,這個函數卻不會被銷毀掉,這個就是閉包的核心內容了;

函數作為返回值:
javascript閉包淺析
javascript閉包淺析

產生差異的原因:兩個情況的作用域不同
函數作為返回值的時候,fn_A1,它的作用域是處在fn_A里面,所以,fn_A1在執行的時候,它首先找到max是fn_A里面的max,而不是全局作用域里面的max,
這個例子里面:當fn_A 這個方法在執行的時候,它會產生一個相應的作用域,在它執行完成的時候,按照道理來說,window會自動銷毀這個作用域的,但是事實上,沒有辦法這么做。因為這個方法它返回的是一個函數,這個函數也需要創建一個作用域,而且,這個函數中,它需要用到一個自由變量max,而且這個max是fn_A這個作用域下面的,因此,這個max不能被銷毀,從而導致了fn_A這個作用域也沒有被銷毀到;因此fn_B在執行的時候(實質上是執行fn_A1,下面以fn_A1來說),過程大概如下圖一樣
在執行fn_A1的時候,它需要用到max這個變量,但是這個函數的作用域里面沒有這個變量,所以往上一層去尋找,在fn_A這作用域里面找到的max,并且它的值是10,
javascript閉包淺析

這里的重點就在于,在創建fn_A1的時候,fn_A已經執行結束了,但是fn_A的作用域還沒有被銷毀掉,這里就形成了一個閉包,因此,fn_A1還能在fn_A的作用域里面找到max,如果fn_A的作用域被銷毀了,那么max就找不到了;
使用閉包會導致內存開銷的增加,過多的使用閉包會可能導致內存泄漏,從而造成瀏覽器的運行速度降低甚至瀏覽器奔潰;

函數作為參數傳遞的時候,fn_A1它的作用域是處在全局的作用域里面,即使它作為參數傳給了fn,但是在fn執行的時候,實際上仍然是fn_A1在執行,而fn_A1在用到max的時候,它首先找到的是全局作用域的max
函數作為參數傳遞
javascript閉包淺析
javascript閉包淺析

下一期我將會針對JavaScript?的數據類型---對象,繼續展開討論,敬請期待哦!
javascript閉包淺析
睿江云計算官網:http://www.eflycloud.com/home?from=RJ_0024

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开阳县| 罗甸县| 钟山县| 资兴市| 洛扎县| 桐柏县| 蓝山县| 兴安盟| 富蕴县| 偃师市| 化隆| 丽江市| 尼木县| 荣成市| 大港区| 湘潭县| 田阳县| 陕西省| 涞水县| 长子县| 宜阳县| 靖安县| 阳新县| 施甸县| 堆龙德庆县| 克拉玛依市| 文成县| 昆山市| 宁津县| 武宁县| 河津市| 延长县| 余江县| 平定县| 桂阳县| 海淀区| 札达县| 凌源市| 黄平县| 泸溪县| 耿马|