![](/img/trans.png)
[英]Javascript why console.log(typeof "Not a Number" - "Number") prints '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;
也會扔。 您應該將變量重命名為其他名稱以使其工作。
第一個作品,因為w
在w + 1
的外觀為W的形式參數,但沒有找到它和外部范圍使用。 接下來, x
在x +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 + 1
的z
其在左側=
是取消定義,然后將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.