[英]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.meowLater
, self
提供給setTimeout
。
也,
我們這里不使用this.meow()
,因為this
指向當前對象,因此指向setTimeout
函數中的window
。
JavaScript具有嵌套的作用域,因此另一個函數內部的函數會繼承外部函數的所有變量(仍在作用域內)。 當您使用異步函數( setTimeout
在這種情況下)的可變self
會參考范圍的自變量,它是this
(貓實例),但是this
將是窗口。
希望這會有所幫助,這需要一些時間來習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.