我想在a
函数中访问变量var2()
的值。但是,如果没有定义值,则会出错。
<html>
<head>
<script type="text/javascript">
function var1(data)
{
var a = data;
}
function var2()
{
var b = a;
alert(b);
}
</script>
</head>
<body>
<a href="#x" class="overlay" onclick="var1(data)"></a>
<input type="button" value="Send" onclick="var2()" />
</body>
</html>
请有人帮助我。
答案 0 :(得分:3)
我认为你应该首先将变量声明为全局变量,这样你就可以在任何地方访问它 这是:
<html>
<head>
<script type="text/javascript">
var a,b;
function var1(data)
{
window.a = data;
}
function var2()
{
window.b = window.a;
alert(window.b);
}
</script>
</head>
<body>
<a href="#x" class="overlay" onclick="var1(data)"></a>
<input type="button" value="Send" onclick="var2()" />
</body
</html>
试试吧! :d
答案 1 :(得分:2)
尝试以下代码
var a;
function var1(data)
{
a= data;
}
function var2()
{
var b = a;
alert(b);
}
答案 2 :(得分:1)
这是一个范围问题。你在代码中拥有它的方式,范围只在函数var1中。您需要在函数范围之外定义它以使其可用于其他函数:
var a;
function var1(data)
{
a = data;
}
答案 3 :(得分:0)
这是因为变量的范围。这意味着函数内的变量不能访问相同或更高级别的其他函数。函数可以但是使用更高级别的变量。
如果要访问该变量,请尝试将其返回。
function var1(data) {
return data
};
function var2() {
var b = var1("This string is a"); // b = "This string is a"
alert(b);
};
在这种情况下,这样做没有任何意义。
答案 4 :(得分:0)
首先在创建函数之前声明变量:
var a = "test";
function var1() {
document.getElementById('data').value = a;
}
function var2() {
var b = a;
alert(b);
}
答案 5 :(得分:0)
虽然您已经接受了答案,但我需要提一下,在全局空间中定义某些内容通常是一个坏主意(无论它是变量还是函数< / em>的)。
全局范围的问题是浏览器已经定义了很多东西。在当前浏览器中,在那里定义了500 + 变量, definitions 和 function ,并且命名冲突存在高风险。
如果名称与您的变量名称和已定义的名称冲突,则结果可能是意外且难以调试(常见陷阱为top
,pos
,parent
,{{1} },name
,self
)。问题是它们要么影响浏览器的行为,要么只读取它们,并且您将无法在其中存储任何内容。
如果您更改示例以使用名称title
而不是top
,并且您在全局范围内定义它,那么您可能会看起来像这样:
a
您现在希望 var top;
function var1(data) {
top = data;
}
function var2() {
var b = top;
alert(b);
}
var1(1000);
var2();
为alter(b)
,但它(取决于浏览器)1000
因为[object Window]
是只读的,但仍会引用{{1}窗口。
如果您考虑使用名称top
,那么它会更糟糕,您的网页将被重定向到新位置。
如果您使用全局范围内浏览器已使用的名称命名 function 之一,则功能也会出现同样的问题(无论它是变量或者 function )你会收到如下错误:
未捕获的TypeError:函数'....'已经声明
因此,如果这些变量受到保护,您需要检查要支持的每个版本中的每个浏览器。即便如此,您也不会知道未来版本的内容。所以你应该尽量避免在全局范围内写一些东西。
避免在全局空间中写入内容的解决方案看起来像这样(使用top
来附加事件,因为您在标记中提及它)
location