我有一个已定义的全局变量,我试图以多种方式更新,但它不起作用
<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!
由于
$(document).ready(function(){
dostuff();
});
如果我正常调用它会正确更新全局变量,但此程序中的其他内容会中断。从$(document).ready(function()?
中更新全局变量的任何提示谢谢!
答案 0 :(得分:2)
我不确定你在哪里调用dostuff()
函数,但如果你想让变量test
成为页面的全局变量,有一件事需要考虑。然后你应该这样宣布它。
//this one is preferd
test = 4;
或
window.test = 4;
这应该有用,请确保拨打dostuff()
。
编辑:解决函数调用问题
所以这里是完整的解决方案,概述了你的问题。
问题:您正在doStuff()
(这是在加载DOM后调用)事件中调用document.ready()
并且您正在打印加载DOM时变量的值。
它显示旧值,因为在DOM中打印值之前永远不会调用doStuff()
。
解决方案:有两种方法可以实现所需的输出。
doStuff()
。 解决方案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;
虽然它完全相同,但它确实可以帮助您明确表达实际发生的事情,这几乎总是比替代方案更好。