js變數範圍和閉包的樣本

來源:互聯網
上載者:User

標籤:reference   解析   嵌套   www   .com   class   函數   全域   bsp   

<script>        /*      js是函數級範圍,在函數內部的變數,內部都能訪問, 外部不能訪問內部的,但是內部可以訪問外部的變數                  閉包就是拿到本不該屬於他的東西,閉包會造成記憶體流失,你不知道什麼時候會用這個閉包,然後這個資源會一直佔據記憶體,造成記憶體流失     */        /*1 --函數內部可以訪問外部的變數*/        /*var i = 10;        function test() {            console.log(i);        }        test();*/        /*2  在函數外部,我們就不能訪問函數內部的變數,不然會報變數沒有被定義*/        /*function test() {            var j = 20;        }        console.log(j);*/    //test.html:19 Uncaught ReferenceError: j is not defined        /*3  函數的嵌套--這個a函數就能訪問test函數的j變數*/        /*function test() {            var j = 5;            function a() {                console.log(j);            }            a();        }        test();*/    //5        /*4*/     /* function test() {                        if(false) {                var i = 5;            } else {                j = 10;            }            //i--undefined 是沒有被賦值而已    j--10            //test.html:42 Uncaught ReferenceError: k is not defined 這就是沒有定義--報錯            console.log(i+"-->"+j +"-->"+k);        }        test();*/        /*5  -- 這裡 在執行的過程中,會將test()這個函數前置,但是在調用它的時候卻不會找到j,因為j是在後面定義的*/            /*test();    //undefined        var j = 10        function test() {            console.log(j);        }*/        /*6*/        /*test();    //返回 undefined        var k = 200;        function test() {            console.log(k);        }*/        /*7*/        /*        var k;        test();        //undefined        k = 200;        function test() {            console.log(k);        }        */        /*其執行個體子6和7是一個意思,都是變數定義了,但是沒被賦值,執行test()的時候,都返回undefined*/        /*9面試題:函數前面加一個波浪線*/        /*var j = 100;        ~(function() {            console.log(j);        })();    //返回100        */        /*10 函數前面沒有波浪線的情況*/        /*var k = 5;        (function() {            console.log(j);        })();*/        //返回  --》test.html:89 Uncaught ReferenceError: j is not defined        //函數前面加波浪線,此時會將函數轉化為一個運算式 輸出  所以這個波浪線很重要        /*11面試題:*/        /*var i = 10;        function test() {            console.log(i);            var i;        }        test();    */        // 返回undefined   這裡的後面的var i;這條語句會被前置,然後會將外面的全域變數i給覆蓋掉,此時這裡面的i又沒有被賦值,所以,執行test()會返回undefined;  下面12的例子說明這個問題        /*12*/        /*var j = 20;        function test() {            var j;            console.log(j);            j = 5;                    }        test();    *///返回undefined  和11是一樣的,這裡在函數內部定義了j 直接把外部的j給覆蓋掉了,然後賦值操作又在console語句的後面,所以會出現undefined        /*---------------------------分割線----------------------*/
/*13 --這裡就是閉包 將我們函數裡面的內容用函數的方式返回出去*/ /*function test() { var j = 5; return function() { return j; } } var t = test()(); console.log(t);*/ </script>

 深入理解Js的執行過程很重要

這裡有,js如何解析函數的

js變數範圍和閉包的樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.