Javascript 如何识别不同的作用域

Javascript 如何识别不同的作用域,javascript,jquery,scope,anonymous-function,Javascript,Jquery,Scope,Anonymous Function,我正在使用添加一个自定义上下文菜单到我的jQuery插件。但在某一点上,我有一个奇怪的问题,我认为这与作用域的交互方式有关。基本上我有两个对象,它们是相同的,但以两种非常小的不同的方式构建,其中一个按预期工作,另一个不按预期工作 我将添加我的一些代码,不幸的是,它太大太复杂了,足以生成一个jsFiddle,如果需要的话,我将尝试生成一个 $.contextMenu({ selector : [jQUery selector], build : function() { // so

我正在使用添加一个自定义上下文菜单到我的jQuery插件。但在某一点上,我有一个奇怪的问题,我认为这与作用域的交互方式有关。基本上我有两个对象,它们是相同的,但以两种非常小的不同的方式构建,其中一个按预期工作,另一个不按预期工作

我将添加我的一些代码,不幸的是,它太大太复杂了,足以生成一个jsFiddle,如果需要的话,我将尝试生成一个

$.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)行),则会显示正确的标签。谁能解释一下为什么