const不能重新初始化用關鍵字宣告的變數。那么,為什么const關鍵字對for of回圈起作用呢?例如,如果我有一個像for(const x of array){...code here...}. 為什么它起作用而不是像for(const x=0;x<array.length;x ){...code here...}?
是否因為后者提到的for loop是重新初始化變數的值,x 但只宣告一次,換句話說 -x為整個回圈宣告了變數。
但是,for of回圈呢?它是否在x每次迭代完成時重新宣告值?
如果不是,那么是什么因素使前面提到的for of回圈起作用?
uj5u.com熱心網友回復:
在第二個示例中,您將 const x 設定為零,然后嘗試使用 x 更改該值。顧名思義,常量在宣告后就不能改變它的值。如果您嘗試在 for/of 回圈中執行 x ,它也會引發錯誤。據推測,您的 for/of 回圈僅讀取 x 的值而不會更改它(我這么說大概是因為您沒有共享此部分的代碼)。
uj5u.com熱心網友回復:
傳統的for回圈是許多語言的主要內容,通常采用類似的形式
for(x=0;x<array.length;x )
這個構造之所以有效是因為它x不僅在回圈內部可見,而且在迭代之間也是可見的——因此x 有效。JavaScript 的for回圈被設計為以類似的方式作業。在for回圈宣告中宣告的變數在整個回圈體中以及迭代之間都是可見的。(事情變得有點奇怪let,但這與這里的問題并不真正相關)
for..of完全是不同的野獸。盡管它使用相同的詞 - for- 作為for(;;)構造,它的作業方式完全不同。for..of為每次迭代呼叫物件的迭代器,并且迭代器回傳的值在回圈之前沒有初始化 - 它們特定于每次迭代,因此類似的東西x 沒有多大意義。
for..of, 在偽代碼中:
iterator = getIteratorFromObject();
loop {
if (iterator.done) break;
nextValue = iterator();
// execute loop body with nextValue
}
迭代器回傳的值在初始化時使用const(具有塊作用域,而不是函式作用域),僅作用于該特定迭代的塊是有意義的。(如果你試圖重新分配const識別符號,就像在傳統for回圈中一樣,你會得到一個錯誤。)
與傳統的 不同for,實際上沒有任何要初始化的初始值(除了迭代器,但迭代器的消耗被抽象在 JavaScript 引擎后面)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/379774.html
標籤:javascript for循环
下一篇:專案已發布,但頁面為空白
