array.length is zero, but the array has elements in it
我目前正在练习使用电子的过程,但是我对javascript很陌生,遇到了一个让我完全困惑的问题。 我有以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 | function getPaths() { var dirPath = document.getElementById("mdir").innerHTML; var filePaths = []; fs.readdir(dirPath, function(err, dir) { for(var i = 0, l = dir.length; i < l; i++) { var filePath = dir[i]; filePaths.push(dirPath +"/" + filePath); } }); console.log(filePaths); console.log(filePaths.length); } |
应该查看
令我感到困惑的是,给定该代码,该阵列将日志记录到控制台,如预期的那样,但是控制台记录的长度为零。 我目前的想法是,它与范围有关,但这没有意义,因为我在正在运行的函数上方的函数中声明了数组
当您按下左侧的小箭头时,将鼠标放在右侧的
演示该问题的示例:(不是解决方案,只是为了了解实际情况)
尝试运行以下代码,看看会发生什么:
1 2 3 4 5 6 | var arr = []; setTimeout(function() { arr.push(1, 2, 3); }, 5000); console.log(arr.length); console.log(arr); |
这里,数组及其长度都在数组填充之前被记录下来。 5秒钟后将填充阵列。因此输出将是
注意:此外,登录到控制台的行(类似于
我希望现在很清楚。
只是为了扩展@ ibrahim-mahrir的答案,他们的意思是这样的
1 2 3 4 5 6 7 8 9 10 11 12 | function getPaths() { var dirPath = document.getElementById("mdir").innerHTML; var filePaths = []; fs.readdir(dirPath, function(err, dir) { for (var i = 0, l = dir.length; i < l; i++) { var filePath = dir[i]; filePaths.push(dirPath +"/" + filePath); } console.log(filePaths); console.log(filePaths.length); }); } |