"未定义"在事件循环中获取输出,为什么?

时间:2017-06-28 08:50:25

标签: javascript

我一直在阅读解释事件循环的this精彩文章。

在该文章中,有一段代码说明了消息的排队和处理方式:



function f() {
  console.log("foo");
  setTimeout(g, 0);
  console.log("baz");
  h();
}

function g() {
  console.log("bar");
}

function h() {
  console.log("blix");
}

f();




这将在控制台(Chrome)中打印以下内容: foo,baz,blix, undefined ,bar。

我想我明白这里发生了什么,但我不明白 undefined 来自哪里?

2 个答案:

答案 0 :(得分:6)

private func showAlertPrivacy() { let alertController = UIAlertController(title: nil, message: "messagePrivacy", preferredStyle: .alert) let alertNo = UIAlertAction(title: "No", style: .default) { (_) in } alertController.addAction(alertNo) let alertSetting = UIAlertAction(title: "Settings", style: .default) { (_) in UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: { (_) in }) } alertController.addAction(alertSetting) present(alertController, animated: true) { } } undefined的返回值,如果您在交互式控制台上执行此操作,您将看到该值,该控制台会自动打印上次执行的表达式的值。

答案 1 :(得分:1)

undefined值是语句f()的结果。 javascript中的每个语句都有一个值作为表达式;没有显式return语句的函数基本上返回undefined

Chrome控制台始终打印出上次执行的语句的值,这是f()在这种情况下的结果。

令人困惑的是, bar 会在稍后打印出来(即在f()之后返回);但这是由超时引起的。