我试图在具有String.prototype.slice()的函数中传递两个参数,但是控制台不断返回此错误:
未捕获的TypeError:无法读取未定义的属性“切片”。
争论不应该被通过吗?
const testText = '<p style='color: red;'>This is a test</p>'
const testParagraph = document.getElementById('test')
const message = (paragraph, originText) => {
let i = 0,
text, isTag
const speed = 50
text = originText.slice(0, ++i)
if (text === originText) return
paragraph.innerHTML = text
const char = text.slice(-1)
if (char === '<') isTag = true
if (char === '>') isTag = false
if (isTag) return message()
setTimeout(message, speed)
}
message(testParagraph, testText)
<div id="test"></div>
最佳答案
在两个地方可能会递归调用message
函数:
if (isTag) return message()
setTimeout(message, speed)
在这两种情况下,
message
函数均不带参数调用。由于此paragraph
,因此originText
参数与undefined
值相关联。然后,它尝试在.slice
上调用undefined
,这会引发错误。您需要将参数传递给递归调用,因为它(像常规函数调用一样)使用一个词法环境创建了一个新的执行上下文。
if (isTag) return message(arg1, arg2)
setTimeout(message.bind(null, arg1, arg2), speed)