编辑
让我更深入一点。我正在尝试创建一个伪承诺实现。这里的想法是我有一个回调,在收到异步调用之前不会执行。所以我只是将所有对这个函数的调用排队,直到它被通知可以执行。队列被清空,任何对该函数的进一步调用都应该立即执行,但由于某种原因,该函数仍在排队。这是因为,无论出于何种原因,我对 runner 函数的重新定义都无法正常工作。下面的代码是我脑海中每一个想法的睡眠不足、沮丧的版本。这是实际的代码:
function Promise(callback){
var queue = []
, callback = callback
, runner = function(){
queue.push({
context: this,
args: Array.prototype.slice.call(arguments, 0)
});
}
;//var
runner.exec = function(){
for(var i = 0, ilen = queue.length; i < ilen; i++){
var q = queue[i];
callback.apply(q.context, q.args);
}
runner = callback;
};
return runner;
}
test = Promise(function(){
$('<div/>').appendTo('#output').html(Array.prototype.slice.call(arguments,0).toString());
});
test(1,2);
test(3,4);
test.exec();
test(5,6);
我正用这个把头撞在墙上。我正在尝试通过函数本身外部的调用重新分配函数中的变量(理想情况下,通过将重新分配函数作为回调传递)。在我在 jsfiddle 上发布的示例中,我创建了一个全局函数,理论上,它引用了其父函数中包含的变量。在调用该外部函数时,我希望它重新分配另一个函数正在使用的值。它似乎不以这种方式工作。
window.test = function temp() {
var val = 7,
func = function() {
return val;
};
window.change = function() {
window.test.val = 555555;
$('<div>Changing ' + val + ' to ' + window.test.val +
'</div>').appendTo($output);
val = window.test.val;
temp.val = window.test.val;
func = function() {
return 'Why isn\'t this working?';
}
}
return func();
}
var $output = $('#output');
$('<div/>').appendTo($output).html('::' + test() + '::');
window.change();
$('<div/>').appendTo($output).html('::' + test() + '::');