【问题标题】:How to clear JavaScript variables on page reload?如何在页面重新加载时清除 JavaScript 变量?
【发布时间】:2016-01-23 02:26:16
【问题描述】:

我正在做一些 javascript 范围测试,但我遇到了变量值的问题。

首先我执行了这段代码:

function changeName() {
    name = "Ronaldinho";
}
changeName()
console.log(name);

控制台的输出是:罗纳尔迪尼奥

然后我只执行了这段代码:

console.log(name);

控制台的输出仍然是:罗纳尔迪尼奥

我使用的是谷歌浏览器。我试图清理缓存,页面重新加载的所有选项(ctrl + F5 / shift + F5 / ctrl + R / shift + R /右键单击重新加载图标和“强制重新加载并清除缓存”),清除缓存,控制台清除,启用 de 选项“禁用缓存(在 DevTools 打开时)”。

仅当我关闭并打开一个新标签时才有效。

【问题讨论】:

  • 是吗?你想达到什么目的?
  • 刷新时不保留范围。你到底做了什么,在 script.js 中运行该代码,然后删除它,用简单的 console.log(name) 替换它,保存 .js 文件,重新加载浏览器并仍然得到相同的输出?因为这样的事情是不可能的
  • @BBog 我也相信这种情况......所以我在 Chrome 中打开了开发工具(从此页面)并粘贴到他的第一个块中并运行它,然后我 Ctrl + F5 'ed 页面,然后运行 ​​console.log,它确实保留了名称。
  • @马克。我明白了,我得到了相同的结果。但是您是在控制台中完成的,而不是使用单独的 JS 文件。这不是一回事。
  • @GoldShip 这就是为什么如果您切换到新选项卡会修复它......请参阅 Magus 的回答。窗口对象在刷新时不会被销毁或重新创建,因为窗口仍然存在。

标签: javascript google-chrome variables scope reload


【解决方案1】:

更改变量的名称,改用“myName”。由于您从不使用“var”关键字,name 在全局范围内。

但是发生了其他事情:window.name 已经被占用了!因为一个窗口有一个与之关联的name。 (更多信息请参见window.open

或者更好:在 99% 的情况下,使用 var 关键字声明变量,其余时间,不要声明变量(意思是 window[anyVariableName] 并不是真正声明变量,而是定义一个窗口对象的新键,在浏览器上下文中隐式可用)。

最终代码(如果要保留变量name):

var name;

function changeName() {
    name = "Ronaldinho";
}

console.log(name); // undefined
changeName()
console.log(name); // "Ronaldinho"

【讨论】:

    【解决方案2】:

    如果您忘记了 javascript 中的 var 关键字,该变量将在根对象中创建。在浏览器中,根对象是window。所以你会在window.name 中找到你的变量。如果你想删除它,你可以这样做delete window.name

    编辑:在 Chrome 控制台中,执行的代码受到保护。 Chrome 使用 window 以外的其他对象。您将在 this.name 中找到您的变量。所以你可以用delete this.name删除它。

    【讨论】:

    • 我刚刚在 Chrome 开发工具中测试过,但它对我不起作用。
    • 是否存在清除关闭窗口并打开新标签的方法??
    • 查看我的编辑。 Chrome 控制台使用 window 以外的其他对象
    • @Magus 还是不会飞。运行后删除 this.name;在控制台中,this.name 仍然等于原始值。
    • 查看 axelduch 的回复。我认为这是你的问题
    猜你喜欢
    • 2010-10-22
    • 2017-02-27
    • 2010-11-19
    • 2018-06-16
    • 2017-09-16
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多