【发布时间】:2014-02-16 21:44:01
【问题描述】:
我正在通过this 教程使用 JavaScript 实现一个 Promise 库。我对 JavaScript 还很陌生,但我有广泛的 Java 背景。
我遇到了以下令我困惑的代码。
var maybeOneOneSecondLater = function() {
var callback;
setTimeout(function() {
callback("hello, there");
}, 1000);
return {
then: function(_callback) {
callback = _callback;
}
};
};
考虑我拨打以下电话。
maybeOneOneSecondLater();
似乎应该调用 setTimeout。什么都没有发生,此时回调显然是未定义的。
但是当我拨打以下电话时:
maybeOneOneSecondLater().then(function(message){
alert(message);
});
变量回调被赋值,setTimeout方法执行回调。我收到显示消息“你好,那里”的警报。
我真的不知道用 Google 来回答这个问题。在我看来,有些东西正在“监视”,因为没有更好的术语,回调变量,一旦分配它就会执行代码。
有人可以向我解释这里发生了什么吗?谢谢!
更新 我缺少的是调用 setTimeout 回调之前的一秒钟。谢谢大家的精彩回答。毕竟没有魔法。 :)
【问题讨论】:
标签: javascript closures settimeout promise