关于console.log()默认返回的undefined


(cinyearchan) #1

前段时间在自习群里讨论了 console.log() 默认返回的 undefined 显示问题,总结了一下
console.log() 在打印之后,会默认返回 undefined
当时同学遇到的问题是,分不清 console.log() 返回的 undefined 和函数返回的 undefined


以上代码运行的结果为

// => undefined
// => Uncaught ReferenceError: a is not defined

疑问在于,结果中的 undefined 究竟是 console.log(b) 打印的,还是返回的,还是函数默认返回的(函数若没有 return 返回值时,默认返回 undefined

fn() // => fn() 执行时,b定义了但未初始化,值为undefined
console.log(b); // => 打印出 undefined,
// => 虽然console.log() 默认会返回 undefined,但由于前面没有关键字 return,所以默认的undefined 不会显示

拓展 如果 console.log() 之前有 return 呢?


结果中的两个 undefined 你清楚了么?


(cinyearchan) #2

tips:函数如果没有返回值,默认返回 undefined 时,控制台显示的 undefined 前面,会出现 标志,你发现了么


(忧郁的伯德) #3


可是如果没有错的话就输出3个undefined了。是为什么呀?


(cinyearchan) #4

最后一个 undefined 前面有 标志,说明最后一个 undefined 是浏览器为了标识函数的返回值,自动加上以供使用者识别,可以不管!!!我们所需要关注的就是,console.log() 打印的 undefinedconsole.log() 默认返回的 undefined

function fn(){
  var z = 1;
  var b;
  console.log(b); // => b 定义了但未初始化,所以 b 为 undefined,
  // console.log(b) 打印结果为 undefined,返回 undefined
  return console.log(b) // => return 关键字会将 console.log()的返回值 undefined 返回,
  // 即 return undefined; 
}

你的疑问在于第三个 undefined

function fn() {
return undefined;
}
// 和
function fn() {
}
// 有区别么?

(忧郁的伯德) #5

嗯,就是那个<· 的undefined不清楚啥意思,学到啦。谢谢~