2

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

<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() 中更新全局变量的任何提示?

谢谢!

4

3 回答 3

2

我不确定您在哪里调用函数,但是如果您希望变量对于页面是全局的dostuff(),则需要考虑一件事。test然后你应该像这样声明它。

//this one is preferd
test = 4;

或者

window.test = 4;

这应该有效,请确保您正在调用dostuff().

编辑:解决函数调用问题

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

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

它显示旧值,因为doStuff()在您在 DOM 中打印值之前从未被调用过。

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

  1. 打电话doStuff()之前开始加载(在其声明之后)
  2. 创建一个函数,该函数进行计算并相应地返回要打印的值。

解决方案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>

解决方案 1的实时 URL

解决方案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>

解决方案 2的实时 URL

希望这会有所帮助,让我知道是否还有其他东西,如果没有,请接受作为答案!

于 2013-02-06T14:20:20.933 回答
1

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

于 2013-02-06T14:08:53.000 回答
0

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

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

var window.varName = value;

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

于 2013-02-06T14:23:59.460 回答