我对javascript的foreach行为感到非常困惑, 我正在使用.quach的jquery来设置一些事件监听器:
$(".xRibbonMenu").each(function(index){
ribbonMenu= new RibbonMenu($(this));
$(this).find(".xRibbonTab").each(function(index){
ribbonMenu.tabs.push($(this));
$(this).click(function(){
ribbonMenu.div.find(".xRibbonTabActive").removeClass("xRibbonTabActive");
$(this).addClass("xRibbonTabActive");
ribbonMenu.div.find(".xRibbonContentActive").removeClass("xRibbonContentActive");
});
});
$(this).find(".xRibbonContent").each(function(index){
ribbonMenu.contents.push($(this));
});
RibbonMenus.push($(this));
});
但是如果调用了该事件,则ribbonMenu似乎总是最后一次循环运行。 我不知道任何其他语言的这种行为。 那么我做错了什么?
答案 0 :(得分:1)
正如@Karl所提到的,您需要将var
添加到您的变量中,如下所示:
var ribbonMenu= new RibbonMenu($(this));
原因是因为在javascript中,当你没有明确地声明变量是本地的时,它是全局的;你需要对此非常小心,因为它是一种确定的方法来获取bug,如你所知;)