如何在页面重新加载时清除JavaScript变量?

时间:2015-10-23 14:00:14

标签: javascript google-chrome variables scope reload

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

首先我执行了这段代码:

let managedObject = frc.objectAtIndexPath(indexPath) as! Appointments
removeImage(managedObject.appointmentImage)

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

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

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

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

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

仅在我关闭并打开新标签页时才有效。

2 个答案:

答案 0 :(得分:7)

如果您忘记了javascript中的var关键字,则会在根对象中创建变量。在浏览器中,根对象为window。因此,您可以在window.name中找到您的变量。如果要删除它,可以执行delete window.name

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

答案 1 :(得分:5)

更改变量的名称,请尝试使用“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"