[英]JS scope chain, variable scope in an object function
我在測試一些代碼只是為了更好地理解JS中的變量作用域鏈。 我已經建立了2個類似的對象構造函數,其中包含一個函數,該函數從先前的范圍調用一個變量。 從我的理解來看,我得到的結果是出乎意料的。
var name = "Outter!";
var o = new function () {
this.name = "Jill";
this.age = 23;
this.func = function () {
console.log(name);
}
}
//output to console for: o.func()// Outter!
根據我的理解,我沒想到會有這個結果。 由於console.log(name)試圖訪問名稱,並且name在先前的作用域(o對象的作用域)中,因此在指向上層作用域的鏈路徑之后,第一個滿足的name變量就是o對象中的變量。 相反,全局作用域名稱變量是引用。 基本上,我期望的結果是“吉爾”。
怎么會?
是否應該將對console.log(name)的調用視為對console.log(window.name)的調用?
顯然,如果我使用console.log(this.name),則將是Jill,但這不是我想要的,我想知道為什么只是“ name”不起作用。
this.name = "Jill"
沒有聲明名為name
的變量。 相反,它在對象實例上定義了一個名為name
的鍵(由new
運算符創建),並將其值設置為Jill
。
如果希望獲得預期的結果,請將console.log(name)
更改為console.log(this.name)
或將this.name = "Jill"
更改為var name = "Jill"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.