如何在javascript中从一个函数访问变量到另一个函数

时间:2013-11-30 05:30:42

标签: javascript jquery html

我想在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>

请有人帮助我。

6 个答案:

答案 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)

首先在创建函数之前声明变量:

jsfiddle

var a = "test";
function var1() {
    document.getElementById('data').value = a;
}

function var2()  {
    var b = a;
    alert(b);
}

答案 5 :(得分:0)

虽然您已经接受了答案,但我需要提一下,在全局空间中定义某些内容通常是一个坏主意(无论它是变量还是函数< / em>的)。

全局范围的问题是浏览器已经定义了很多东西。在当前浏览器中,在那里定义了500 + 变量 definitions function ,并且命名冲突存在高风险。 如果名称与您的变量名称和已定义的名称冲突,则结果可能是意外且难以调试(常见陷阱为topposparent,{{1} },nameself)。问题是它们要么影响浏览器的行为,要么只读取它们,并且您将无法在其中存储任何内容。

如果您更改示例以使用名称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