[英]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.