在页面初始化时声明全局变量

时间:2011-11-11 00:56:58

标签: javascript

我的网络应用初始化方法基于加载的页面运行。

我需要全局变量仅可用于第1页的第2页。所以我想要做的是仅在加载第1页时定义并初始化全局变量。我确信有办法做到这一点,但我不知道如何做。

我粘贴了我相关的初始化方法和我需要的两个全局方法。目前,它们是在第1页重新加载和第2页重新加载时定义和初始化的。

我希望他们只为第1页重新加载定义一个初始化。

/********************
group:globals
********************/

var local = 
  { 
  client_validation:1,
  persistent_element:'hide_1'
  };

window.onload=initialize_page;

/* 
- initialize_page() - function activated on each page load or reload.  Set by global window.onload
*/

function initialize_page()
  {
  var signin_found;
  /*Used to determine which page is loaded / reloaded*/
  if(signin_found=document.getElementById('signin_button')) 
    {
    signin_found.onclick=interface_signin;
    /*Interfaces and bindings*/

1 个答案:

答案 0 :(得分:1)

我认为你可能会为自己过度复杂,因为有问题的变量使用的是可忽略的内存,但无论如何,我能想到的最简单的方法就是这样做:

function initialize_page() {
   if (/* somehow figure out if you're on page one */) {
      window.local = {
         client_validation:1,
         persistent_element:'hide_1'
      };
   }

   // etc.
}

请注意,您不能通过在var中放置if语句来有条件地声明变量:JavaScript没有块范围(仅限函数范围),因此它将“提升”声明在if之外。但是在全局变量的情况下,你可以解决这个问题,因为全局变量基本上只是window对象的属性,所以可以有条件地创建属性,如上所示。

如果您后来发现两个页面都有一些共同的变量,但也有各自独立的要求,您可以这样做:

var local = {
   commonSetting1 : "something",
   commonSetting2 : "something else"
}

function initialize_page() {
    if (/* page one? */) {
       // add page one's settings
       local["client_validation"] = 1;
       local["persistent_element"] = "hide_1";
    } else if (/* page two? */) {
       // add page two's settings
       local["somePageTwoSetting"] = "whatever";
       // etc.
    }
}