Javascript 如何识别不同的作用域
我正在使用添加一个自定义上下文菜单到我的jQuery插件。但在某一点上,我有一个奇怪的问题,我认为这与作用域的交互方式有关。基本上我有两个对象,它们是相同的,但以两种非常小的不同的方式构建,其中一个按预期工作,另一个不按预期工作 我将添加我的一些代码,不幸的是,它太大太复杂了,足以生成一个jsFiddle,如果需要的话,我将尝试生成一个Javascript 如何识别不同的作用域,javascript,jquery,scope,anonymous-function,Javascript,Jquery,Scope,Anonymous Function,我正在使用添加一个自定义上下文菜单到我的jQuery插件。但在某一点上,我有一个奇怪的问题,我认为这与作用域的交互方式有关。基本上我有两个对象,它们是相同的,但以两种非常小的不同的方式构建,其中一个按预期工作,另一个不按预期工作 我将添加我的一些代码,不幸的是,它太大太复杂了,足以生成一个jsFiddle,如果需要的话,我将尝试生成一个 $.contextMenu({ selector : [jQUery selector], build : function() { // so
$.contextMenu({
selector : [jQUery selector],
build : function() {
// some things to do here...
var contextMenuItems = {}; // list of all the menu entries
var actions = [{ label : "1" }, { label : "2" }];
$.each(actions, function(key, value) {
var newSubMenu = {}; // sub menu
// some other things...
// FIRST OBJECT, DOESN'T WORK
var subMenu = {
sep1 : "-",
remove : {
callback : function() {
console.log(action);
}
}
}
// SECOND OBJECT, WORKS AS EXPECTED
var subMenu2 = {
sep1: "-",
};
subMenu2["remove"] = {
callback : function() {
console.log(action);
}
};
$.extend(contextMenuItems[value.label], { items : $.extend(newSubMenu, subMenu) }); (1)
$.extend(contextMenuItems[value.label], { items : $.extend(newSubMenu, subMenu2) }); (2)
});
}
});
基本上,我为上下文菜单的每个条目添加相同的子菜单。当我单击子菜单项“删除”时,我希望它记录父标签。但是如果我添加“子菜单”
对象(第(1)行),它总是记录第一个“操作”,如果我添加“子菜单2”对象(第(2)行),则会显示正确的标签。谁能解释一下为什么