我一直在阅读解释事件循环的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 来自哪里?
答案 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()
之后返回);但这是由超时引起的。