浏览器中的“后退/前进”是否会改变JavaScript变量?

7
<script type="text/javascript>
var x = 0; //this occurs in the beginning of the page.

$("#button").onclick{
x = 1;
}

</script>

假设变量"x"的值从0变为了1。然后用户点击了一个链接。当用户点击"返回"按钮时,x的值是0还是1?


2
你可以测试一下,然后告诉我们结果吗?=) - David Thomas
嘿,楼主,你可能想选择另一个答案作为被采纳的答案 :D - Sharky
2个回答

22

正如 另一篇问题中详细说明的那样,这个问题的答案取决于浏览器

在 Firefox 和 Opera 中,如果单击 Set x,然后单击链接并按下返回按钮,下面的页面将保留 1 的状态。但是,在 Chrome 和 IE6 中,页面将重新加载,x 将具有值 0

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<input type="button" id="button" value="Set x">
<input type="button" id="check-x" value="Check x">
<a href="http://www.stackoverflow.com">Click Me</a>
<script>
var x = 0;

$("#button").click(function(){
    x = 1;
});

$("#check-x").click(function(){
   alert(x); 
});
</script>

1
我认为Chrome现在也保留了变量的状态。 - BentOnCoding

0

更新

这并不适用于像Firefox这样的浏览器。请参见Trey的答案。

它将是0。浏览器不会在页面加载之间缓存Javascript变量的状态。


很奇怪,我一定做错了什么。我的代码有问题吗?我不太懂JavaScript,只是想看看为什么会出现不同的行为。 - Anthony Forloney
但是有时候点击链接然后返回不会导致页面重新加载,就像链接的目标是本地锚点一样。 - Sean
你怎么这么确定呢?浏览器是否保存JavaScript状态的快照完全取决于它自己。当按下“返回”按钮时,有些浏览器确实会保存快照,例如我在Chrome中看到过。 - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接