簡體   English   中英

JS作用域鏈,對象函數中的變量作用域

[英]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.

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