无法更新javascript / html函数中的全局变量

时间:2013-02-06 14:07:19

标签: javascript html

我有一个已定义的全局变量,我试图以多种方式更新,但它不起作用

<script>
var test = 4;

 function dostuff() {


...

test=7;
or
window.test=7;
or
declare it here without the var = 7

...

}
</script>

然后......

<td><script type="text/javascript">document.write(test);</script></td>

输出:4!

有任何帮助吗?帮帮我说7!

由于


像这样调用dostuff()。

$(document).ready(function(){
    dostuff();
});

如果我正常调用它会正确更新全局变量,但此程序中的其他内容会中断。从$(document).ready(function()?

中更新全局变量的任何提示

谢谢!

3 个答案:

答案 0 :(得分:2)

我不确定你在哪里调用dostuff()函数,但如果你想让变量test成为页面的全局变量,有一件事需要考虑。然后你应该这样宣布它。

//this one is preferd
test = 4;

window.test = 4;

这应该有用,请确保拨打dostuff()

编辑:解决函数调用问题

所以这里是完整的解决方案,概述了你的问题。

问题:您正在doStuff() (这是在加载DOM后调用)事件中调用document.ready()并且您正在打印加载DOM时变量的值

它显示旧值,因为在DOM中打印值之前永远不会调用doStuff()

解决方案:有两种方法可以实现所需的输出。

  1. 开始加载(在声明之后)之前致电doStuff()
  2. 创建一个函数,该函数执行计算并相应地返回值。
  3. 解决方案1:

     <!DOCTYPE html>
        <html>
        <head>
        <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
          <script>
    //Should be before Body tag
           test = 4;
    //Declaring function
        function doStuff()
        {
    
          test = 8;
    
        }
        //Calling right after declarion 
        doStuff();
          </script>
        <meta charset=utf-8 />
        <title>JS Bin</title>
        </head>
        <body>
    /*Here value is updated and ready to print any any where in the DOM*/
          <h1><script type="text/javascript">
    
            document.write(test);</script></h1>
        </body>
        </html>
    

    Solution 1的实时网址

    解决方案2:

    <!DOCTYPE html>
    <html>
    <head>
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
      <script>
        /*Should be before Body tag*/
       test = 4;
    
    function doStuff()
    {
      /*Changing value and returing it.*/
      test = 8;
      return test;
    
    }
    
      </script>
    <meta charset=utf-8 />
    <title>JS Bin</title>
    </head>
    <body>
      <h1><script type="text/javascript">
        /*Calling function and printing returned value*/
        document.write(doStuff());</script></h1>
    </body>
    </html>
    

    Solution 2的实时网址

    希望这会有所帮助,让我知道是否还有其他任何东西,如果没有什么可以作为答案!!

答案 1 :(得分:1)

显然,你没有在任何地方调用dostuff()函数:)

答案 2 :(得分:0)

头标记脚本实际上不执行函数,它们只是定义它们。您必须通过文档中某处的函数调用来执行该函数。此函数调用可以附加到页面的onload事件,以使其在页面加载时自动执行,或者可以附加到其他事件(如onclick),以便稍后触发。

以你所做的方式声明一个全局变量缺乏描述力;声明全局变量时,它附加到窗口对象。因此,当你声明一个时,声明它是这样的:

var window.varName = value;

虽然它完全相同,但它确实可以帮助您明确表达实际发生的事情,这几乎总是比替代方案更好。