为什么我不能在单独的html和js文件中使用全局变量?

时间:2016-12-29 04:42:36

标签: javascript jquery html

我有两个html文件:index.html和lobby.html。在我在index.html中加载的main.js中,使用window.location.href加载lobby.html。我已经尝试了在main.js中定义全局变量的各种方法(名称空间如:var Global = {}; Global.variableName = 0; ... Global.variableName = whatever;,只需在函数作用域中定义变量:var myGlobal;甚至使用window.来定义和使用全局变量: window.myGlobal = 0; ... window.myGlobal = whatever;)。无论这些方法如何,每当我尝试在lobby.html的单独脚本中访问这些“全局变量”时,它总会抛出一个未定义的错误。这有什么用呢?

2 个答案:

答案 0 :(得分:3)

第一个问题的答案,为什么我不能......?,是你在加载页面时开始一个新的会话。因此,上一个会话中的任何Javascript变量都消失了。

另一个(隐含的)问题,如何在会话中保留Javascript变量的值?要么是use cookies in Javascript(MDN),要么将请求变量附加到URL的末尾然后在新页面加载时处理它们:GET(SO)

答案 1 :(得分:2)

当加载新页面时,您实际上是按照其他人的解释开始新会话,因此数据将被重置。为了保留页面中的某些数据,您可以根据业务需要使用HTML5 Web存储 - 会话存储或本地存储。

<强> MDN source

  

Web Storage中的两种机制如下:

     
      
  • sessionStorage为每个给定来源维护一个单独的存储区域,该区域在页面会话期间可用(只要   浏览器打开时,包括页面重新加载和恢复)。
  •   
  • localStorage会做同样的事情,但即使关闭并重新打开浏览器也会一直存在。
  •   

<强> W3Schools

  

HTML本地存储提供了两个用于在客户端上存储数据的对象:

     

window.localStorage - 存储没有过期日期的数据

     

window.sessionStorage - 存储一个会话的数据(浏览器选项卡关闭时数据丢失)