摘要:此時,中定義的局部變量就被保存在內存中。所以當執行的時候,其真正的作用域是運行時的作用域運行時作用域詞法作用域所以第一次調用時,由于是,所以返回而第二次返回是。因此在使用閉包時,需要非常注意內存泄漏的問題。
說起閉包,相信寫前端的同學都知道,而且相信在實際的項目中或多或少都已經用到了閉包。那到底什么才是閉包,閉包又是怎么產生的呢?
1. 什么是閉包
在阮老師的文章中提到:
閉包就是能夠讀取其他函數內部變量的函數。由于在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成"定義在一個函數內部的函數"。
2. 閉包的作用
一個是可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中。
3. 一個簡單的閉包實例
function count() { let num = 0; return function add() { return ++num; } } let a = count(); a(); //1 a(); //2
首先將count()的返回結果也就是count()函數里的返回的函數賦值給a。此時,count()中定義的局部變量num就被保存在內存中。當第一次調用a()時,返回++num,即1;當第二次調用a()時,由于此時num是1,所以返回的結果是2
4. 產生閉包的原因
相信很多人對這個問題都很困惑,都會認為一個函數中,返回一個函數,這樣就形成了閉包。其實這僅僅是閉包產生的方法,而不是原因,下面將為大家解釋原因。
產生的主要原因是因為JavaScript是詞法作用域的,即在該函數定義時就已經被賦予了一個作用域。然后在運行時,又會根據實際運行情況被賦予運行時的作用域。通過這兩個作用域一個JS函數才會被正確執行。
以上例為例,在執行count()的時候,該函數的作用域是
運行時作用域 num = 0 |
---|
詞法作用域 |
當count()執行時,返回add函數的時候,由于此時add處于定義狀態,故返回時生成的該函數的詞法作用域即為上述count()的作用域。所以當執行a()的時候,其真正的作用域是
add運行時的作用域 |
---|
count運行時作用域 num = 0 |
count詞法作用域 |
所以第一次調用add時,由于num是0,所以返回1;而第二次返回是2。
5. 總結
從上述的描述中,可以看出由于生成閉包的時候,外部函數的局部變量(運行時作用域)被內部函數作為詞法作用域保存在內存中,故當內部函數被釋放之前,該塊內存是不會被釋放的。因此在使用閉包時,需要非常注意內存泄漏的問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107255.html
摘要:函數式編程前端掘金引言面向對象編程一直以來都是中的主導范式。函數式編程是一種強調減少對程序外部狀態產生改變的方式。 JavaScript 函數式編程 - 前端 - 掘金引言 面向對象編程一直以來都是JavaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數式編程越來越多得受到開發者的青睞。函數式編程是一種強調減少對程序外部狀態產生改變的方式。因此,...
摘要:忍者級別的函數操作對于什么是匿名函數,這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數是一個很重要且具有邏輯性的特性。通常,匿名函數的使用情況是創建一個供以后使用的函數。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果...
摘要:插件開發前端掘金作者原文地址譯者插件是為應用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內優雅的實現文件分片斷點續傳。 Vue.js 插件開發 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應用添加全局功能的一種強大而且簡單的方式。插....
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經典面試題從輸入到頁面加載發生了什么這是一篇開發的科普類文章,涉及到優化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結思考,循序漸進的理解 TypeScript。 網絡基礎知識之 HTTP 協議 詳細介紹 HTT...
摘要:原文地址一個非常適合入門學習的博客項目前端掘金一個非常適合入門學習的項目,代碼清晰結構合理新聞前端掘金介紹一個由編寫的新聞。深入淺出讀書筆記知乎專欄前端專欄前端掘金去年的一篇老文章,恰好今天專欄開通,遷移過來。 破解前端面試(80% 應聘者不及格系列):從閉包說起 - 掘金修訂說明:發布《80% 應聘者都不及格的 JS 面試題》之后,全網閱讀量超過 6W,在知乎、掘金、cnodejs ...
閱讀 3229·2021-11-11 16:55
閱讀 2490·2021-10-13 09:39
閱讀 2424·2021-09-13 10:27
閱讀 2163·2019-08-30 15:55
閱讀 3088·2019-08-30 15:54
閱讀 3133·2019-08-29 16:34
閱讀 1827·2019-08-29 12:41
閱讀 1072·2019-08-29 11:33