我有一些简单的代码,如下所示。不幸的是,它在第二次破坏性任务上失败了,我无法弄清原因。
代码:
let prev, curr
[prev, curr] = setPreviousAndCurrent(1, prev, curr)
console.log(`Previous: ${prev}`)
console.log(`Current ${curr}\n`)
[prev, curr] = setPreviousAndCurrent(2, prev, curr) // fails on this assignment
console.log(`Previous: ${prev}`)
console.log(`Current ${curr}\n`)
[prev, curr] = setPreviousAndCurrent(3, prev, curr)
console.log(`Previous: ${prev}`)
console.log(`Current ${curr}\n`)
function setPreviousAndCurrent(data, previous, current) {
// We cannot use the ! operator for checking against values of previous and current since value can be 0, which will give a false positive
if (previous === undefined) {
previous = data
} else if (previous && current === undefined) {
current = data
} else {
previous = current
current = data
}
return [previous, current]
}
输出:
❯ node js_test.js
Previous: 1
Current undefined
/js_test.js:7
[prev, curr] = setPreviousAndCurrent(2, prev, curr)
^
TypeError: Cannot set property 'undefined' of undefined
at Object.<anonymous> (/js_test.js:7:14)
at Module._compile (internal/modules/cjs/loader.js:971:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1011:10)
at Module.load (internal/modules/cjs/loader.js:822:32)
at Function.Module._load (internal/modules/cjs/loader.js:730:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1051:12)
at internal/main/run_main_module.js:16:11
如果我将代码更改为(如下所示),则它将按预期工作。
代码:
let prev, curr
[prev, curr] = setPreviousAndCurrent(1, prev, curr)
console.log(`Previous: ${prev}`)
console.log(`Current ${curr}\n`)
let temp = setPreviousAndCurrent(2, prev, curr)
prev = temp[0]
curr = temp[1]
// [prev, curr] = setPreviousAndCurrent(2, prev, curr)
console.log(`Previous: ${prev}`)
console.log(`Current ${curr}\n`)
temp = setPreviousAndCurrent(3, prev, curr)
prev = temp[0]
curr = temp[1]
// [prev, curr] = setPreviousAndCurrent(3, prev, curr)
console.log(`Previous: ${prev}`)
console.log(`Current ${curr}\n`)
function setPreviousAndCurrent(data, previous, current) {
// We cannot use the ! operator for checking against values of previous and current since value can be 0, which will give a false positive
if (previous === undefined) {
previous = data
} else if (previous && current === undefined) {
current = data
} else {
previous = current
current = data
}
return [previous, current]
}
// Works as expected
输出:
❯ node js_test.js
Previous: 1
Current undefined
Previous: 1
Current 2
Previous: 2
Current 3
我无法弄清楚为什么会发生这种情况,因为很明显该函数正在运行并返回期望值,但无法通过销毁第二次调用它的变量prev和curr来将其赋值。
感谢您的回应!谢谢! :)