国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你不知道的閉包

wwq0327 / 1310人閱讀

摘要:前言這篇文章不是全面講閉包知識的,而是針對那些已經對閉包有所了解但是還存在疑惑的人群。那么為什么能保存在函數變量里面的呢實現閉包閉包函數定義時的作用域鏈到函數執行時仍然有效。

前言

這篇文章不是全面講閉包知識的,而是針對那些已經對閉包有所了解但是還存在疑惑的人群。比如:閉包為何能保存變量?接下來就詳細講述此類問題。以下內容來自犀牛書第六版。

正文 經典閉包案例

函數柯里化:

function curry(fn){
    var arg1 = Array.prototype.slice.call(arguments,1);
    return function(){
        var arg2 = Array.prototype.slice.call(arguments);
        var mergeArr = arg1.concat(arg2);
        return fn.apply(null,mergeArr);
    }
}

function add(num1,num2){ 
    return num1 + num2;
}

var curriedAdd = curry(add, 5); 
alert(curriedAdd(3)); // 8
疑惑

外部函數中定義的局部變量在函數返回之后就不存在了,那么嵌套的函數是如何調用不存在的作用域鏈的呢?如上面所示,調用curriedAdd()的時候,第一次傳入的5是存在的。那么5為什么能保存在函數變量里面的呢?

實現閉包

閉包:函數定義時的作用域鏈到函數執行時仍然有效。

我們將函數作用域描述為一個對象列表,不是綁定的棧。每次調用javascript函數的時候,都會為之創建一個新的局部變量對象來保存局部變量,把這個對象添加至作用域鏈中。當函數返回的時候,就從作用域鏈中將這個綁定變量的對象刪除。

1.如果不存在嵌套的函數,也沒有其他引用指向這個綁定的對象,它就會被當做垃圾回收掉。
2.如果定義了嵌套的函數,每個嵌套的函數都各自對應一個作用域鏈,并且這個作用域鏈指向一個變量綁定對象。
(1)如果這些嵌套函數對象在外部函數中保存了下來(比如賦值給外部函數中的某個變量),它們也會和所指向的變量綁定對象一樣當做垃圾回收
(2)但是如果這個函數定義了嵌套函數,并將它們作為返回值返回,或者存儲在某處的屬性里,這時就會有一個外部引用指向這個嵌套函數,它就不會被當做垃圾回收。并且它所指向的變量綁定對象也不會被當作垃圾回收。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86907.html

相關文章

  • 重讀你不知道JS (上) 第一節五章

    摘要:詞法作用域的查找規則是閉包的一部分。因此的確同閉包息息相關,即使本身并不會真的使用閉包。而上面的創建一個閉包,本質上這是將一個塊轉換成一個可以被關閉的作用域。結合塊級作用域與閉包模塊這個模式在中被稱為模塊。 你不知道的JS(上卷)筆記 你不知道的 JavaScript JavaScript 既是一門充滿吸引力、簡單易用的語言,又是一門具有許多復雜微妙技術的語言,即使是經驗豐富的 Jav...

    worldligang 評論0 收藏0
  • [JS]《你不知道Javascript·上》——詞法作用域和閉包

    摘要:吐槽一下,閉包這個詞的翻譯真是有很大的誤解性啊要說閉包,要先說下詞法作用域。閉包兩個作用通過閉包,在外部環境訪問內部環境的變量。閉包使得函數可以繼續訪問定義時的詞法作用域。 閉包是真的讓人頭暈啊,看了很久還是覺得很模糊。只能把目前自己的一些理解先寫下來,這其中必定包含著一些錯誤,待日后有更深刻的理解時再作更改。 吐槽一下,閉包這個詞的翻譯真是有很大的誤解性啊…… 要說閉包,要先說下詞法...

    guqiu 評論0 收藏0
  • 你不知道JavaScript:閉包

    摘要:回憶我一年前,雖然使用過很多,但卻完全不理解閉包是什么。就算你,也會在循環完成時,輸出次當然,不要以為主要的原因是延遲函數會在循環結束時才執行,不然我為什么會在閉包這一節用使用這個例子,哈哈。 前言 在了解閉包的概念時,我希望你能夠有JavaScript詞法作用域的知識,因為它會讓你更容易讀懂這篇文章。 感觸 對于那些使用過JavaScript但卻完全不理解閉包概念的人來說,理解閉包可...

    weknow619 評論0 收藏0
  • 你不知道JS》讀書筆記---作用域及閉包

    摘要:注此讀書筆記只記錄本人原先不太理解的內容經過閱讀你不知道的后的理解。作用域及閉包基礎,代碼運行的幕后工作者引擎及編譯器。 注:此讀書筆記只記錄本人原先不太理解的內容經過閱讀《你不知道的JS》后的理解。 作用域及閉包基礎,JS代碼運行的幕后工作者:引擎及編譯器。引擎負責JS程序的編譯及執行,編譯器負責詞法分析和代碼生成。那么作用域就像一個容器,引擎及編譯器都從這里提取東西。 ...

    denson 評論0 收藏0
  • 你不知道javascript》筆記_作用域與閉包

    摘要:建筑的頂層代表全局作用域。實際的塊級作用域遠不止如此塊級作用域函數作用域早期盛行的立即執行函數就是為了形成塊級作用域,不污染全局。這便是閉包的特點吧經典面試題下面的代碼輸出內容答案個如何處理能夠輸出閉包方式方式下一篇你不知道的筆記 下一篇:《你不知道的javascript》筆記_this 寫在前面 這一系列的筆記是在《javascript高級程序設計》讀書筆記系列的升華版本,旨在將零碎...

    galaxy_robot 評論0 收藏0

發表評論

0條評論

wwq0327

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<