gpt4 book ai didi

javascript - 访问匿名函数外部的变量

转载 作者:行者123 更新时间:2023-11-28 19:57:43 25 4
gpt4 key购买 nike

我知道这可能是重复的,但我只是不知道该怎么做(相信我,我已经搜索过,我试图摆弄代码)。我有以下代码,它正在构建一个文件表,您可以将其拖放到应用程序中。

function CreateTrackTable (data, length) {

var fs = require('fs'),
mm = require('musicmetadata'),
i = 0;

for (i; i < length; ++i) {

var mimeType = data.dataTransfer.files[i].type;

if (mimeType == "audio/mp3" || mimeType == "audio/x-m4a"){

FilePath = data.dataTransfer.files[i].path;
var parser = mm(fs.createReadStream(FilePath));

parser.on('metadata', function (result) {

if (result.picture.length == 0) {
$("#track-table").append('<tr path="'+ FilePath +'"><td></td></tr>');
}else{
var picture = base64ArrayBuffer(result.picture[0].data);
$("#track-table").append('<tr path="'+ FilePath +'"><td></td></tr>');
}
});
}
}
}

问题是 FilePath 变量是可访问的,但它始终“打印出”相同的路径,而不是循环 i 所遵循的路径。

该应用程序是使用 nodo-webkit 构建的,一切正常,这是我唯一无法解决的问题。

感谢您的帮助!

最佳答案

循环内创建的每个函数都在相同的FilePath上关闭(即它们不会各自获得自己的副本),这意味着它们每次执行时都会看到该变量具有的任何值。为了使这项工作按照您的预期进行,您需要进行安排,以便他们确实每个人都获得自己的副本。由于 JavaScript 变量的作用域为最近的封闭函数,因此方法是将函数创建包装在立即调用的函数中,该函数接收所需的值作为参数:

(function(FilePath) {
parser.on('metadata', function (result) {
if (result.picture.length == 0) {
$("#track-table").append('<tr path="'+ FilePath +'"><td></td></tr>');
} else {
var picture = base64ArrayBuffer(result.picture[0].data);
$("#track-table").append('<tr path="'+ FilePath +'"><td></td></tr>');
}
});
})(FilePath);

在这种情况下,每个新函数都会通过一个新的 FilePath 关闭,从而产生所需的结果。

关于javascript - 访问匿名函数外部的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com