为什么变量'name'在首次使用后不需要初始化[Javascript]

时间:2014-10-17 04:57:56

标签: javascript html variables web defined

每当我初始化一个名为'name'的变量时,它都会通过页面保持其值。

像这样:

page1.html

<html>
<script>
    var name = prompt("What's your name?");
    alert(name);
</script>
    <a href='page2.html'> Page2</a>
</html>

page2.html

<html>
   <script>
       alert(name);
   </script>
</html>

因此,在两个页面中,变量名称保留了在第一页的提示中给出的值,两个页面提醒同样的事情,有人可以解释为什么会发生这种情况吗?

3 个答案:

答案 0 :(得分:5)

您所看到的行为并不正常,并且几乎不会对任何其他变量起作用。 name实际上是Javascript中的保留变量,这就是您看到有趣行为的原因。

Javascript中的所有变量都是window对象的属性。如果您创建名为age的变量,则还可以在window.age访问该变量。 window.name是当前浏览器窗口的一个特殊属性,允许为其指定名称,并且此值可以在页面之间保留。

如果您将变量的名称更改为age,它将恢复正常工作 - 该变量在page2.html中将为空。

A little more about window.name

答案 1 :(得分:3)

全局name变量是window.name property。它是一个在同一浏览上下文中跨页面加载确实存在的字符串 - 如果在新选项卡中打开第二页,它就不应该“工作”。

要避免这种情况,请改为使用safe name作为变量,或将代码包装在IIFE中。

答案 2 :(得分:1)

它不会通过页面保持其价值,并且这两个页面不会提醒相同的事情。

页面中必须有一些其他代码将name设置为某个值。