Skip to content

Commit 6bd7a9c

Browse files
committed
deep traverse circular detection should check arrays too
1 parent e59b301 commit 6bd7a9c

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/watcher.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -336,16 +336,14 @@ Watcher.prototype.teardown = function () {
336336

337337
const seenObjects = new Set()
338338
function traverse (val, seen) {
339-
var i, keys
340-
339+
let i, keys, isA, isO
341340
if (!seen) {
342341
seen = seenObjects
343342
seen.clear()
344343
}
345-
if (isArray(val)) {
346-
i = val.length
347-
while (i--) traverse(val[i], seen)
348-
} else if (isObject(val)) {
344+
isA = isArray(val)
345+
isO = isObject(val)
346+
if (isA || isO) {
349347
if (val.__ob__) {
350348
var depId = val.__ob__.dep.id
351349
if (seen.has(depId)) {
@@ -354,9 +352,13 @@ function traverse (val, seen) {
354352
seen.add(depId)
355353
}
356354
}
357-
358-
keys = Object.keys(val)
359-
i = keys.length
360-
while (i--) traverse(val[keys[i]], seen)
355+
if (isA) {
356+
i = val.length
357+
while (i--) traverse(val[i], seen)
358+
} else if (isO) {
359+
keys = Object.keys(val)
360+
i = keys.length
361+
while (i--) traverse(val[keys[i]], seen)
362+
}
361363
}
362364
}

0 commit comments

Comments
 (0)