簡體   English   中英

為什么 console.log(z) 會拋出 NaN?

[英]Why does console.log(z) throw NaN?

當它能夠從外部范圍拾取w ,為什么它不能拾取z

 var w = 1, z = 2; function foo( x = w + 1, y = x + 1, z = z + 1 ) { console.log( x, y, z ); } foo();

它能夠從外部范圍獲取w

是的,因為您的函數中沒有變量w

為什么它不能拿起z

因為您的參數聲明了一個名為z的局部變量,並且它掩蓋了全局變量。 但是,本地表達式尚未使用默認表達式中的值進行初始化,並且在訪問它時會引發ReferenceError 這就像let / const時間死區

let z = z + 1;

也會扔。 您應該將變量重命名為其他名稱以使其工作。

第一個作品,因為ww + 1的外觀為W的形式參數,但沒有找到它和外部范圍使用。 接下來, xx +1認定為正式的參數范圍,並使用它X的值,因此分配到y工作正常。

z + 1的最后一種情況下,它發現z尚未在形式參數范圍內初始化,並在嘗試從外部范圍中找到它之前拋出錯誤。

將變量 z 更改為@bergi 指出的其他內容,應該可以解決問題。

var w = 1, z = 2;
function foo( x = w + 1, y = x + 1, a = z + 1 ) {
 console.log( x, y, a );
}
foo(); 

你有
function foo( x = w + 1, y = x + 1, z = z + 1 )

x=w+1 x是undfined然后w也是不確定的,因此考慮當地的執行上下文如此這般outerscope沒有找到任何價值,找到W = 1,因此在局部空間w也成為1

現在期間z = z + 1z其在左側=是取消定義,然后將z其在右側=也undifine所以它看起來為內部本地執行上下文Z和找到一個z這是在等式的左邊所以它不需要去外太空。 所以z變成 undifine

但是如果你這樣寫z=this.z+1你會得到 z=3 因為this.z不會直接查看 localscope 去外層鏡找到 z=2

暫無
暫無

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

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