Node.js contextMenu click处理程序正在为错误的菜单项执行命令

Node.js contextMenu click处理程序正在为错误的菜单项执行命令,node.js,menu,electron,Node.js,Menu,Electron,在我的electron应用程序中,我有读取JSON文件并插入菜单项的代码: var settingsdata = fs.readFileSync('./settings.json'); var jsonContent = JSON.parse(settingsdata); for (var i = 0; i < jsonContent.length; i++) { var obj = null; obj = jsonContent[i]; console.log(o

在我的electron应用程序中,我有读取JSON文件并插入菜单项的代码:

var settingsdata = fs.readFileSync('./settings.json');
var jsonContent = JSON.parse(settingsdata);
for (var i = 0; i < jsonContent.length; i++) {
    var obj = null;
    obj = jsonContent[i];
    console.log(obj.label);
    console.log(obj.parameters);
    contextMenu.insert(0,new MenuItem({
        label: obj.label,
        click: function() {
            child_process.execFileSync(vExecutablePath, obj.parameters)
        },
        position: 'before'
    }))
}
var settingsdata=fs.readFileSync('./settings.json');
var jsonContent=JSON.parse(setingsdata);
for(var i=0;i

问题在于插入的菜单项的单击处理程序。即使
console.log(obj.parameters)
为每个项目显示了正确的不同参数,它也只对插入的最后一个项目执行命令,而不是单独执行命令。

您应该在
for
循环中将
var
替换为
let

var
的作用域是函数,因此在执行
click
处理程序时,
i
将设置为
jsonContent.length

for
循环中使用
let
时,每次迭代都会得到一个新变量,可以在闭包中使用(即在案例中的
单击
处理程序)