2014-04-26 16 views
1

下面的代碼給了我一個相互衝突的答案。 該數組是全局的但範圍內的功能?我不明白。 下面的代碼JavaScript中的window.requestFileSystem的數組範圍

var pictures = new Array(); 

    var app = { 
    initialize: function() { 
    this.bindEvents(); 
    }, 
    bindEvents: function() { 
    document.addEventListener('deviceready', this.onDeviceReady, false);  
    }, 
    onDeviceReady: function() { 

    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 
     function(fileSystem) { 
      fileSystem.root.getDirectory("DCIM/Camera/", {create: false}, 
       function(dataDir) { 
        var directoryReader = dataDir.createReader(); 
        directoryReader.readEntries(
         function(entries){ 
          var i;       
          for (i=0; i<entries.length; i++) { 
           pictures[i] = entries[i].fullPath;         
          } 
          console.log(pictures.length + ' ---- in'); 
         }, fail) 
       }, fail); 
     }, fail); 

    console.log(pictures.length + ' ---- out'); 

... 當圖片進入功能,Web控制檯值= 176

當照片出來的功能,Web控制檯值= 0

爲什麼?

在此先感謝

+0

我相信'requestFileSystem'是異步的。我猜你首先會看到'out'控制檯日誌記錄,然後是'in'控制檯日誌記錄因此。 – PhistucK

回答

0

這裏的問題是FileSystem API調用是異步的。

例如,如果你運行該代碼:

var i = 0; 
setTimeout(function() { 
    i = 10; 
    console.log('i in: ' + i); 
}, 100); 

console.log('i out: ' + i); 

你會看到我的行爲類似於你看到,由於到了setTimeout的中的console.log後」的發生(「我出來的事實:'+ i);「。相同的概念適用於您使用的FileSystem調用。