更改后,JavaScript全局变量会恢复为原始值吗?

时间:2013-06-18 07:04:20

标签: javascript scope global-variables

我有一个全局变量window.current_index,用于记录应用程序状态,即我们在javascript Web应用程序中所在的页面。

然后我有一个代码块转到下一页,并递增window.current_index以反映状态更改(取出不相关的DOM操作代码,这将使得更难以查看问题):

$('#next-page').click(function() {
    console.log('current index is ' + window.current_index);
    var next_index = window.current_index + 1;
    console.log('next index is ' + next_index);
    //update the index
    window.current_index = window.current_index + 1;
    console.log('current index is now ' + window.current_index);
});

第一次工作正常,但是当我再次点击它时,我没有得到预期的结果。通过控制台记录,我得到一个奇怪的输出:

current index is 2         main.js:57
next index is 3            main.js:59
current index is now 3     main.js:62
current index is 2         main.js:57
next index is 3            main.js:59
current index is now 3     main.js:62

当我再次触发该功能时,window.current_index 似乎尚未更新,即使它之前已经说过了吗?这个变量是不是适当的范围所以我可以将应用程序状态存储在其中并且它将在事件处理程序调用中持续存在?显然不是因为它不起作用......我做错了什么?我猜这是一个范围问题,但我无法弄清楚我的生活如何才能正确地做到......:/

澄清:此处没有页面重新加载,页面不会在操作之间重新加载。我只是通过JavaScript隐藏/显示一个新的“框架”。我也没有使用iframes,我只是在一个网页上使用$('div').hide()$('div').show()

2 个答案:

答案 0 :(得分:1)

它适用于我

window.current_index = 0;
$('#next-page').click(function() {
    console.log('current index is ' + window.current_index);
    var next_index = window.current_index + 1;
    console.log('next index is ' + next_index);
    //update the index
    window.current_index = window.current_index + 1;
    console.log('current index is now ' + window.current_index);
});

http://jsfiddle.net/hHFkJ/1/

答案 1 :(得分:0)

此代码没有任何问题。我有两个具有相同选择器的事件处理程序,这会导致问题。感到愚蠢......