簡體   English   中英

Javascript解構console.log導致錯誤

[英]Javascript deconstruction console.log causing error

我試圖用遞歸方法解構數組。 下面是一個簡單的示例。 一切正常。

function createNode(index, node) {
    let next = node+ 1
    if (next < 100) {
        for (let i=0; i < 5; i++) {
            [index, next] = createNode(index, next)
        }
    }
    return [index, next]
}
createNode(0, 0)

但是,當我將console.log添加到for循環時,它崩潰了。

 for (let i=0; i < 5; i++) {
     console.log(next)
     [index, next] = createNode(index, next)
 }

未捕獲的TypeError:無法設置未定義的屬性“ 99”

問題沒有解決。 我只想了解並知道是什么原因造成的。 我已經搜索了一段時間,老實說,我還不知道。

您省略了分號

參見https://stackoverflow.com/a/2846298/4023734

這是您的代碼無法正常工作的主要原因。 通常您可以避免這種情況,因為JavaScript會自動為您插入分號。

但是在這種情況下,句子后面是另一個以字符[

所以,

console.log(next)
[index, next] = createNode(index, next)

實際上與

console.log(next)[index, next] = createNode(index, next)

並且javascript將評估console.log(next) (返回未定義),然后嘗試獲取它的[index, next] 由於[] index, next內的表達式index, next是一個逗號分隔的表達式,其計算結果為最后一個表達式,因此它實際上與next相同

錯誤提到99的原因是因為在評估時:

console.log(next)[index, next] = createNode(index, next)

右側需要在分配完成之前進行評估,並且由於它具有遞歸調用,因此只有在終止情況之后才進行第一次分配(在下一個<100后評估為false)

因此,如果發生錯誤,它將嘗試評估:

undefined[99] = [0, 100]

暫無
暫無

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

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