关于闭包传参的问题 javascripthtml5闭包递归 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function(entries){}函数是由readEntries()方法异步调用才执行的 console.log(thisQueue);//这时 function(entries){}函数还没有执行呢 traverseFileTree = function (item) { var thisQueue = []; if (item.isFile) { // Get file thisQueue.push(item); return thisQueue; } else if (item.isDirectory) { // Get folder contents var dirReader = item.createReader(); dirReader.readEntries(function (thisQueue) { return function(entries) { for (var i=0; i<entries.length; i++) { results = traverseFileTree(entries[i]); for (var j = 0; j < results.length; j++) { thisQueue.push(results[j]); } } //若将console.log(thisQueue);放在此处则可以输出结果 } }(thisQueue)); //function(entries){}函数是由readEntries()方法异步调用才执行的 console.log(thisQueue);//这时 function(entries){}函数还没有执行呢 return thisQueue; } }, traverseFileTree = function (item,returnfunction) { var thisQueue = []; if (item.isFile) { // Get file thisQueue.push(item); returnfunction(thisQueue);//这样回调发送数据 } else if (item.isDirectory) { // Get folder contents var dirReader = item.createReader(); dirReader.readEntries(function (thisQueue) { return function(entries) { for (var i=0; i<entries.length; i++) { results = traverseFileTree(entries[i]); for (var j = 0; j < results.length; j++) { thisQueue.push(results[j]); } } returnfunction(thisQueue);//这样回调发送数据 } }(thisQueue)); //return thisQueue; 不要用return返回的 } }, 2楼已经说的很清楚了,24行执行时的thisQueue是一个空数组。涉及到异步操作的,都应该要设置回调参数,不然直接return,异步操作还没执行呢。而且thisQueue已经在上下文中了,就不要再去闭包了,看的也很累。 你去看看ajax吧,就知道回调发送数据是怎么回事了 我只是不明白thisQueue这个变量直接就可以访问,为什么还要当成参数传到匿名函数里面。 看个简单的例子a<input type="text" id="a" /><br />b<input type="text" id="b" /><script type="text/javascript">function ok(v){ document.getElementById("a").value = v;}function setTxt(returnfunction){ var v; setTimeout(function(){//用定时器模拟异步获取数据 v = "这是异步获取数据"; alert("异步获取数据成功\n"+v); returnfunction(v); },1000); alert("我先执行了,v现在是:"+v); return v;}document.getElementById("b").value = setTxt(ok);alert("setTxt()都执行完了,数据还是没有获取");</script> js中关于函数对象与事件的使用? ie中如何让一个disable的按钮不再获得焦点,最好能够让他下一个按钮获得焦点,help! 急!!!!! JS的RAIDO取值函数问题 我想问问数据库联动的2个下拉列表和文本框怎么实现 有谁知道梅花雪的QQ和MSN jquery的获取天气为什么不能进回调呢? js如何清空form表单内的s:textfield value值 有三个select框,选第一个里某项第二个里内容变,在选第二个里某项,第三个里内容变,请问怎么做?(高分) 求助,随机排列,等大神,谢谢 学习JS视频教程 那些代码都能用的上吗? 请教,jQuery中的一个正则表达式
console.log(thisQueue);//这时 function(entries){}函数还没有执行呢
traverseFileTree = function (item) {
var thisQueue = [];
if (item.isFile) {
// Get file
thisQueue.push(item);
return thisQueue;
}
else if (item.isDirectory) {
// Get folder contents
var dirReader = item.createReader();
dirReader.readEntries(function (thisQueue) {
return function(entries) {
for (var i=0; i<entries.length; i++) {
results = traverseFileTree(entries[i]);
for (var j = 0; j < results.length; j++) {
thisQueue.push(results[j]);
}
}
//若将console.log(thisQueue);放在此处则可以输出结果
}
}(thisQueue)); //function(entries){}函数是由readEntries()方法异步调用才执行的
console.log(thisQueue);//这时 function(entries){}函数还没有执行呢 return thisQueue;
}
},
traverseFileTree = function (item,returnfunction) {
var thisQueue = [];
if (item.isFile) {
// Get file
thisQueue.push(item);
returnfunction(thisQueue);//这样回调发送数据
}
else if (item.isDirectory) {
// Get folder contents
var dirReader = item.createReader();
dirReader.readEntries(function (thisQueue) {
return function(entries) {
for (var i=0; i<entries.length; i++) {
results = traverseFileTree(entries[i]);
for (var j = 0; j < results.length; j++) {
thisQueue.push(results[j]);
}
}
returnfunction(thisQueue);//这样回调发送数据
}
}(thisQueue));
//return thisQueue; 不要用return返回的
}
},
涉及到异步操作的,都应该要设置回调参数,不然直接return,异步操作还没执行呢。而且thisQueue已经在上下文中了,就不要再去闭包了,看的也很累。
b<input type="text" id="b" />
<script type="text/javascript">
function ok(v)
{
document.getElementById("a").value = v;
}function setTxt(returnfunction)
{
var v;
setTimeout(function(){//用定时器模拟异步获取数据
v = "这是异步获取数据";
alert("异步获取数据成功\n"+v);
returnfunction(v);
},1000);
alert("我先执行了,v现在是:"+v);
return v;
}document.getElementById("b").value = setTxt(ok);
alert("setTxt()都执行完了,数据还是没有获取");
</script>