问题描述
为什么打电话 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?