gpt4 book ai didi

javascript - 无法从闭包内输出正确的变量值

转载 作者:行者123 更新时间:2023-12-02 19:21:04 25 4
gpt4 key购买 nike

我正在尝试使用 https://github.com/stepanvr/js-shortcuts用于键盘快捷键的 jquery 插件。但是我被这个问题困扰了。我在 json 数据结构中定义快捷方式数据。然后我循环遍历这些快捷方式,当输出按下的快捷方式时,会报告错误的快捷方式。无论我按哪一个快捷键,都会报告 Ctrl+Shift+P 组合。我相信这与 JavaScript 如何处理这个处理函数有关。

var data = {    'name' : 'Eclipse (Java)',    'version' : '1.0',    'hotkeys' : {        'Navigation' : {            'Ctrl+Shift+R'      : 'Open / Search for resources, e.g. files',            'Ctrl+Shift+T'      : 'Open / Search for Types',            'Ctrl+E'            : 'Allows to select an editor',            'Ctrl+F8'           : 'Shortcut for switching perspectives',            'Alt+Left'          : 'Go to previous/ next editor position in history',            'Ctrl+PageUp'       : 'Switch to previous/next editor',            'F3'                : 'Go to the declaration of this variable',            'Ctrl+Shift+P'      : 'Go to the matching bracket'        }    }};var verify = function(msg) {    var node = document.getElementById('debug');    node.innerHTML += msg + ' ';};$(document).ready(function() {    for (var x in data.hotkeys.Navigation) {        $.Shortcuts.add({            type:'down',            mask:x,            handler:function () {                verify(x);            }        });    }    $.Shortcuts.start();});

最佳答案

您的问题在于设置回调的范围,x 变量随着循环的进行而变化,您必须将其包装在闭包中,如下所示:

  for (var x in data.hotkeys.Navigation) {
(function(x){
$.Shortcuts.add({
type:'down',
mask:x,
handler:function () {
verify(x);
}
});
})(x);
}

关于javascript - 无法从闭包内输出正确的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526981/

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