为何控制台执行console.log("hello")返回undefined?是否同C语言void函数原因?
为什么console.log("hello")执行后会返回undefined?
和C语言void函数的原因一致吗?
嘿,这个问题问得特别到位,刚好戳中了JavaScript和C语言在函数返回值设计上的核心差异,我来给你拆解清楚~
首先说JavaScript里的console.log("hello")为啥返回undefined:
- 所有JavaScript函数,只要没有显式写return语句返回某个值,就会默认返回
undefined。这是JS语言本身的规则,不管函数有没有做其他事情(比如输出内容到控制台)。 console.log的职责就是把你传入的内容打印到控制台,它的设计目标里就不包含“返回一个有用的值”,所以它没有写return语句。当你在控制台执行这个函数时,控制台不仅会执行它的打印操作,还会显示这个函数执行后的返回结果——也就是默认的undefined。
举个简单的例子,你自己写个空函数试试:
function doNothing() {} doNothing(); // 控制台同样会输出undefined
这和console.log的情况完全一样,都是因为函数没有显式返回值,所以JS自动补了undefined。
再说说和C语言void函数的区别,这俩其实本质不一样:
- C语言里的
void类型函数,是真的不返回任何值。编译器会直接禁止你去接收这类函数的返回值——比如你写int result = voidFunction();,编译器直接报错,因为它知道这个函数根本没有返回值可以给你。 - 但JavaScript里不存在“完全没有返回值”的函数,哪怕你写的函数啥也不干,它也会给你返回
undefined。console.log只是没有主动返回值,并不是不能返回值——你甚至可以自己重写它让它返回别的东西(当然不建议这么干)。
总结一下:console.log返回undefined是JS函数的默认行为,而C语言的void函数是真正的无返回值,两者的原因并不一致。
内容的提问来源于stack exchange,提问作者Vincent Tang
相关产品推荐
相关产品推荐

