我正在做一些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打开时)"。
仅在我关闭并打开新标签页时才有效。
答案 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"