Javascript中window.requestFileSystem的数组范围
下面的代码给出了一个相互矛盾的答案。 数组是全局的,但在函数中没有作用域?我不明白。 这是密码Javascript中window.requestFileSystem的数组范围,javascript,cordova,Javascript,Cordova,下面的代码给出了一个相互矛盾的答案。 数组是全局的,但在函数中没有作用域?我不明白。 这是密码 var pictures = new Array(); var app = { initialize: function() { this.bindEvents(); }, bindEvents: function() { document.addEventListener('deviceready', this.onDeviceReady, false);
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');
。。。
当图片进入函数时,webconsole值=176
退出函数时,webconsole值=0
为什么?
提前感谢这里的问题是文件系统API调用是异步的 例如,如果运行代码:
var i = 0;
setTimeout(function() {
i = 10;
console.log('i in: ' + i);
}, 100);
console.log('i out: ' + i);
您将看到我的行为与您看到的类似,因为setTimeout发生在console.log'I out:'+I;之后;。同样的概念也适用于您正在使用的文件系统调用。我认为requestFileSystem是异步的。我猜您首先会看到控制台外日志记录,然后是控制台内日志记录,因为这一点。