解决方案 »

  1.   

    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;
        }
    },
      

  2.   


    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返回的
        }
    },
      

  3.   

    2楼已经说的很清楚了,24行执行时的thisQueue是一个空数组。
    涉及到异步操作的,都应该要设置回调参数,不然直接return,异步操作还没执行呢。而且thisQueue已经在上下文中了,就不要再去闭包了,看的也很累。
      

  4.   

    你去看看ajax吧,就知道回调发送数据是怎么回事了
      

  5.   

    我只是不明白thisQueue这个变量直接就可以访问,为什么还要当成参数传到匿名函数里面。
      

  6.   

    看个简单的例子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>