1. 程式人生 > 其它 >一個JS閉包問題

一個JS閉包問題

程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>閉包問題</title>
</head>
<body>
    <script>
        function fn1() {
            var a = 2;
            function fn2() {
                a++
                console.log(a)
            }
            return fn2
        }
        var f1 = fn1()
        f1() //3
        f1() //4

        var f2 = fn1()
        f2() //3
        f2() //4
    </script>
</body>
</html>

輸出結果

3
4
3
4

尚矽谷_JS高階_常見的閉包
問題就是為什麼不應該都是輸出3,a為什麼沒有在每次函式呼叫前被重新賦值?

我暫時這樣理解:
因為return fn2給了f,f沒消失,閉包就不會,所以再var一個f,那就會出現兩個閉包了。

我還是懵的狀態