簡體   English   中英

為什么匿名函數可以從其定義的函數訪問變量?

[英]Why does an anonymous function have access to a variable from the function it is defined in?

我試圖了解jQuery和JavaScript對象和函數,並了解this工作原理和指向的地方。

請有人可以解釋為什么可行。

Cat.prototype.meowLater = function() {
    var self = this;
    window.setTimeout(
        function() {
            self.meow();
        }
        , 1000);
}

我感興趣並感到困惑的一點是,為什么可以在計時器調用的匿名函數中實際訪問變量self原因。 我認為,因為在另一個函數中聲明了self ,所以它將是本地的,並且只能對該函數訪問。

函數從父作用域繼承變量(除非被同名且作用域更窄的另一個變量屏蔽)。

由於匿名函數是在self范圍內的函數中定義的,因此它可以訪問它。

內部函數可以使用外部函數可用的變量。

這里,

Cat.prototype.meowLater = function() {
    // I create the variable self that refers to the this (the current object)
    var self = this;

    // I create a timeout that calls the self.meow function within an anonymous function
    /*** NOTE : You don’t always have to create an anonymous function it’s just that in
        this case, it is required ***/
    window.setTimeout(
        function() {
            self.meow();
        }
        , 1000);
}

因為,該setTimeout是內部函數Cat.prototype.meowLaterself提供給setTimeout

也,
我們這里不使用this.meow() ,因為this指向當前對象,因此指向setTimeout函數中的window

JavaScript具有嵌套的作用域,因此另一個函數內部的函數會繼承外部函數的所有變量(仍在作用域內)。 當您使用異步函數( setTimeout在這種情況下)的可變self會參考范圍的自變量,它是this (貓實例),但是this將是窗口。

希望這會有所幫助,這需要一些時間來習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM