在學習 JavaScript 時,我遇到了一個關于提升的問題,如果你運行下面的代碼,你會得到什么?
f1();
console.log(b);
console.log(a);
function f1() {
var a = b = 1;
console.log(a);
console.log(b);
}
答案是你得到三個 1 和一個由于提升而有意義的錯誤。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
根據結果??,我可以推斷出var a = b = 1;等于var a = 1; b = 1;
我的問題是為什么?
我試圖用谷歌搜索它,但似乎沒有解釋 var 和 '=' 的執行順序。如果您能向我展示如何var a = b = 1;逐步執行,我將不勝感激。
uj5u.com熱心網友回復:
因為assignment是一個計算分配值的運算式。所以這個操作:
b = 1
不僅分配 to 的值,1而且b整個運算式的計算結果都是1. 由于它是一個計算值的運算式,因此可以在需要值的任何時候使用。
這需要一個值:
var a = (something)
所以你可以使用任何運算式,例如:
var a = (b = 1)
并且括號是不必要的,因為在a評估運算式并產生值之前不會發生賦值:
var a = b = 1
不能同時宣告和賦值為運算式。例如:
var a = (var b = 1)
因為宣告不是一個運算式,它是一個陳述句。陳述句可以被認為是“一行代碼”,不能原地放置在其他代碼中間。
您可以通過直接在控制臺上輸入代碼,在瀏覽器的除錯工具中對此進行測驗。如果你這樣做:
var a = 1
控制臺將列印undefined,因為該陳述句沒有產生任何值(即使它確實為 分配了值a)。如果你這樣做:
b = 1
控制臺將列印1,因為運算式產生了一個值(以及為 分配了一個值b)。
a關于問題中正在測驗的其余代碼,和之間的主要區別在于b宣告并因此具有特定范圍,而未宣告因此默認為物件上可在任何地方訪問的屬性。abwindow
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/453579.html
標籤:javascript
上一篇:在React中復制元素
