首頁 >web前端 >js教程 >js中閉包的解釋以及變數宣告提前的例子(程式碼)

js中閉包的解釋以及變數宣告提前的例子(程式碼)

不言
不言原創
2018-08-15 16:28:181549瀏覽

這篇文章帶給大家的內容是關於js中閉包的解釋以及變數宣告提前的例子(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

閉包

在函數A中宣告了函數B,函數B中使用了函數A的作用域中的變數,且函數A返回(return)了函數B,那麼函數B就對函數A的作用域形成了閉包,函數A調用完畢之後,只要返回的函數B存在,函數A的作用域也一直存在

function makeFn(){
        var n1 = 100;
        function fn(){
            var n2 = 200;
            console.log(n1);
        }
        return fn;
    }
    var f2 = makeFn();
    f2();

閉包可以實現物件的私有屬性,如:

var obj = {
        name:"sunset",
        age:12,
        speak:function(){
            console.log("我是"+this.name);
        }
    }
    console.log(obj.name);

再來一個範例:

function makeObj(){
        var name = "sunset";
        var age = 12;
        var obj = {
            speak:function(){
                console.log("我叫"+name);
            }
        }
        return obj;
    }
    console.log(obj.speak());

最後一個非常好的範例:(導入jQuery後執行看看)

<script>
    for (var i = 0; i < 10; i++) {
        function makeFn(index) {
            function fn() {
                console.log(index)
            }
            return fn;
        }
        var btn = makeFn(i);
        $("<button></button>")
        .text(i + 1)
        .appendTo(document.body)
        .on("click",btn)
    }
</script>

變數宣告提前:

在js的作用域中,所有變數的宣告都會被提前,但是賦值不會提前(變數提前就不示範了,學到這已經不用解釋了)

var a = 3;
    function f1(){
       console.log(a);
       var a = 10;
    }

f1();

等同於

function f1(){
        var a;
        console.log(a);
        a = 10;
    }
f1();

 相關推薦:

 PHP 閉包取得外部變數和global關鍵字宣告變數的差異解說_ php實例

JS宣告變數詳解

#JavaScript閉包-閉包中的變數與this物件

以上是js中閉包的解釋以及變數宣告提前的例子(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn