JavaScript堆栈、后进先出堆栈:值不符合预期

JavaScript堆栈、后进先出堆栈:值不符合预期,javascript,stack,Javascript,Stack,我有以下代码 var stackMapIn = []; var stackMapOut = []; var stackBack = []; stackMapOut.push("m1"); $scope.clickLinks = function(initialOut,initialIn,extra,backIn,backOut,name){ $('div#'+initialOut+'Map,'+extra).fadeOut('slow',function(

我有以下代码

var stackMapIn = [];
var stackMapOut = [];
var stackBack = [];

stackMapOut.push("m1");

$scope.clickLinks = function(initialOut,initialIn,extra,backIn,backOut,name){
        $('div#'+initialOut+'Map,'+extra).fadeOut('slow',function(){
            $('.'+initialOut+'Details,.bkbtn'+backOut).css("display","none");
            $('.'+initialIn+'Details,.bkbtn'+backIn).css("display","block");
            $('.noQuery').css("display","none");
            $("#buildingHeader").html(name);
            $('div#'+initialIn+'Map').fadeIn('slow');
        })

    stackMapOut.push(initialIn);
    stackMapIn.push(initialOut);
    stackBack.push(backIn);
}

$scope.clickBack = function(bkbtnCheck){
    alert(stackBack[0]);
    mapOut = stackMapOut.pop();
    mapIn = stackMapIn.pop();
    stackBack.pop();
    backIn = stackBack[0];
    alert(backIn);

    $('div#'+mapOut+'Map').fadeOut('slow',function(){
        $('.'+ mapOut + 'Details,.bkbtn').css("display", "none");
        $('.' + mapIn + 'Details,.bkbtn'+backIn).css("display", "block");
        $(".noQuery").css("display","none");
        $("#buildingHeader").html("Name");
        $('div#' + mapIn + 'Map').fadeIn('slow');
    })
}
现在,我将对代码运行时发生的情况进行一次快速运行

首次运行clickLinks时:

初始值='m2'

initialOut='m1'

后退=‘家’

clickBack尚未运行

第二次运行clickLinks时:

初始值='m7'

initialOut='m2'

后退='CentralPortfolio'

好的,在这一点上,事情应该是这样的(我期望):

stackMapOut=['m1','m2','m7']

stackMapIn=['m1','m2']

stackback=['Home','CentralPortfolio']

现在我们运行clickBack。。。为什么警报输出“Home”

我想做的是,当点击链接运行时,我有一系列的东西出现和消失。有时,用户可以运行clickBack以返回到以前的状态(状态)。因此,我使用JavaScript堆栈来跟踪它处于什么状态以及需要返回的位置

问题是,我可以运行clickLinks一次,连续单击Back一次,没有问题。我甚至可以第二次运行clickLinks,但仍然可以单击后退按钮两次(返回开始),而不会出现问题。但是我仍然不明白为什么此时stackBack[0](哪一个应该是堆栈的顶部?=“Home”,而不是“CentralPortfolio”

因为我现在遇到的真正问题是如果我第三次运行clickLinks:stillstackBack[0]=“Home”(此时我希望它是“CentralCampus”),因此,显示的是“Home”back按钮(同时根据mapOut和mapIn显示正确的其他内容)而不是显示中央Portfolio的后退按钮;因为我在使用“CentralCampus”之前已经“弹出”了


请,如果需要任何其他信息或您需要更多的澄清,让我知道。我尽我所能提供任何需要的信息,并尽可能清楚地表达出来

现在我们运行clickBack。。。为什么警报输出“Home”?`

因为
stackBack[0]
Home
。你希望它做什么?你的问题中甚至有:

stackback = ['Home','CentralPortfolio']
索引
0
是数组中的第一个元素,即
Home
。最后一个元素是
stackBack[stackBack.length-1]

使用JavaScript堆栈

不,您使用的是javascript数组,但使用它就像使用堆栈一样。除非你像数组一样对它进行索引——这是你困惑的根源。您可以将其作为堆栈与
pop
push
一起使用,但不要尝试使用
[]
对其进行索引


在数组上按
键时,会在数组末尾添加一个元素。换句话说,它作为索引
youraray.length-1
的最后一个元素结束。当您
弹出
时,将再次从数组中取出最后一个元素。因此,弹出
stackback
将返回
CentralPortfolio
,当然,第一个元素是不变的。

好吧,这就是我的大脑工作的结果。我知道我一定是混淆了这个概念的一部分!尽管如此,通过正确解释数组包含的内容,我似乎理解了它!出于某种原因,我同时认为[0]是当前值,[0]是第一个值,我需要最后一个值!非常感谢。