【发布时间】:2011-04-20 16:57:54
【问题描述】:
请原谅尴尬的标题,我会尽力解释我的特殊问题。
我有三个 javascript 代码:
- 一些自执行代码调用我的个人 Ajax 函数并将其传递给回调。
- 检索数据的 ajax 函数本身调用回调,将数据传递给它。
- 回调本身接收数据并将其解析为长度为 n 的数组。
需要注意的是,自执行代码和回调函数是在它们自己的闭包中定义的。 ajax 函数通过我定义为 $ 的导入命名闭包访问。
我对 JavaScript 还很陌生,我仍在学习闭包及其作用域。我有理由相信这个问题很可能与此有关。
不管怎样,我的问题与试图访问那个所谓的填充数组有关。由于我在合适的范围内(或者我相信)将数组定义为解析函数,所以我认为将项目推入其中应该没有问题。
这是自执行的:
(function ($){
//Load stock
var items = [];
var response = $.Ajax("scripts/Lookup.php","GET",parse);
function parse(a){
for(/*Simplified view*/){
var item = new $.Item();
item.name = domStuff.textContent;
item.description = domStuff.textContent;
item.price = domStuff.textContent;
item.id = domStuff.textContent;
items.push(item);
}
}
//Test the length (and verify contents)
for(var i=0; i < items.length; i++){
alert(items[i].price);
}
}($));
这是我的定义,其中包括 Ajax 函数:
var $ = (function(){
var s = {};
var ajax = function(url,method,callback){
var a = new XMLHttpRequest();
a.open(method, url, true);
a.onreadystatechange = function(){
if(this.readyState==4){
callback(a);
}
}
a.send();
};
s.Ajax = (function(){
return ajax;
}());
return s;
}());
所以标题的合理性在于,当我用 firebug 探测代码时,我可以看到 items 填充了 3 个由解析数据正确定义的对象。
然后循环按预期发出 3 次警报。
但是,如果我删除断点并让 firebug 忽略代码,则循环不会播放,我只能假设数组为空。
如果我在测试循环之前alert(items),代码也可以工作。
【问题讨论】:
-
在哪里可以找到这个特殊版本的 Firebug?
-
如果看起来像代码同步问题。当您使用 Firebug of Alert 时发生的唯一变量是延迟。似乎延迟为您的某些代码完成提供了喘息的时间。 (我还没有完全分析你的代码,但这是我想到的第一件事)。
标签: javascript scope firebug closures