閉包的理解-from my own opinion

weixin_30924079發表於2020-04-04

閉包,說起來那麼難,其實理解了作用域,那麼理解閉包就容易多了。

全域性環境,區域性環境,這兩個概念很好理解了。那麼要深入理解下函式的區域性環境。

函式的區域性環境,也就是說在一個函式內定義的變數,這個變數只能在該函式內部進行呼叫。

還要記住一點,父級函式內宣告的變數,可以在子函式內進行呼叫;反之不可以。 

明白以上兩點,那麼閉包就差不多了。

下面是給出的例項:

function outer() {  //宣告父函式
        var num = 33;

        function inner() {  //宣告子函式
            return num;
        };
        return inner();
    };

    var obj = outer();
    alert(obj);  //返回值是 33

 抽象成概念的話:

由於作用域的關係,JS全域性環境不能訪問函式內宣告的區域性變數。

那麼閉包提供了一種途徑,可以使外部環境獲取到函式內宣告的區域性變數。

假設一個functionA,內部宣告瞭一個functionB, 那麼通過function B ,外部環境可以訪問到functionA內定義的變數。

 

轉載於:https://www.cnblogs.com/new-dream-new-hope/p/5324388.html

相關文章