閉包

閉包

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>閉包</title>
</head>
<body>
    <script>

        // 當函數可以記住並訪問所在的詞法作用域,即使函數是在當前詞法作用域之外執行,這時就產生了閉包

        // var o = {
        //     fun: function(){
        //         console.log(fun); // fun is not defined
        //     }
        // }
        // o.fun();

        var fn = function(){
            console.log(fn);
        }
        console.log(fn);

        function fun(n,o){
            console.log(o);
            return{
                fun:function(m){ 
                    return fun(m,n); // 保持着對局部變量n的引用 第一次調用時爲0 m同理 第一次爲1
                }
            }
        }
        var a = fun(0); // undefined 調用fun(0); 返回對象 該對象保持着對局部變量n,o的引用 此時n是0,o是undefined
        a.fun(1); // 0 a.fun(1) 執行fun() 此時的n因爲閉包持有 值爲0 打印爲0
        a.fun(1).fun(2);
        
    </script>
</body>
</html>
發佈了20 篇原創文章 · 獲贊 10 · 訪問量 3467
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章