如何解决无论您是否返回`console.log`,为什么都得到完全相同的结果?
为什么打电话 console.log()
function test1() {
console.log('test1')
}
// or ES6
const test2 = () => { console.log('test2') }
给出与返回 console.log()
function test3() {
return console.log('test3')
}
// or ES6
const test4 = () => console.log('test4')
test1() // -> test1 undefined
test2() // -> test2 undefined
test3() // -> test3 undefined
test4() // -> test4 undefined
虽然我了解没有显式的函数,return
始终会返回undefined
,但对我来说,返回console.log()
的结果会给与我直觉完全相同的输出。
解决方法
我认为通过查看以下内容,您会更好地理解
:
const realConsoleLog = console.log
console.log = (...val) => {
realConsoleLog(...val)
return val
}
const noReturn = () => { console.log('yep') }
const doesReturn = () => console.log('yep')
const a = noReturn()
const b = doesReturn()
console.log(`a is ${a}`)
console.log(`b is ${b}`)
如果运行程序,您会发现将noReturn()
和doesReturn()
函数分配给变量时会执行它们。因此,在第一种情况下,该函数正在执行其块,然后return
不执行任何操作,因此a为undefined
。但是在doesReturn
函数中,您实际上是在执行console.log
方法,我们已经对其进行了调整,以返回所有原始参数,然后返回console.log
返回的变量。由于原始的console.log
不返回任何内容,因此您将获得undefined
作为答案。
JavaScript没有void
返回类型说明,因此,如果没有这样的显式return
,则只要任何执行上下文停止,undefined
都将返回。
要说明理由-JavaScript中的void
是一个运算符,用于评估其旁边的表达式。无论评估哪个表达式,void总是返回undefined
您可以了解到,无论何时在浏览器中使用console
,即使您为变量分配了值,也会看到undefined
的返回值是main
线程执行上下文返回
找到了这个答案,该答案具有很好的关联性-Why do functions return `undefined` instead of `null` by default?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。