访问变量到javascript函数

时间:2013-06-20 07:30:53

标签: javascript

我知道这个问题听起来很愚蠢。但我实际上需要帮助。

我有一个局部变量。我想在javascript函数中访问该变量。

我知道有两种方法可以做到。

第一种方法是将它作为参数传递给函数。

下一种方法是将局部变量设置为全局变量并访问函数中的全局变量。

    <script type="text/javascript">

        function func1(j)
        {
            alert(j);
        }

        function func2()
        {

            alert(globali2);
        }

        function test()
        {
            var i1 = 10;
            // First way. Passing argument to function
            func1(i1);

            // Second way. Using global variable.
            var i2 = 22;
            globali2 = i2;
            func2();
        }

        test();

    </script>

是否有其他方法可以访问函数内的变量。

谢谢, 保罗

更新

我想从第二个函数访问第一个函数中定义的变量。我将无法更改第二个功能的功能签名。我现在唯一的解决方案是使用全局变量。我只是希望有另一种方法,而不是使用全局变量。

2 个答案:

答案 0 :(得分:0)

Javascript有一个非常重要的设计模式可以解决您的问题:namespacing。它提供了一种处理许多不同函数所需的变量的方法,而不必每次都将它们作为参数处理,并且还避免使用全局变量。这样,只需在全局空间中创建一个成员 - 您的命名空间,您的脚本就会产生“最小占用空间”。 jQuery是使用这种设计模式的最突出的例子。

Javascript具有非常强大的功能(first-class member)。这意味着您可以嵌套它们:

// this is your namespace - it is the only point of access to your script
// no variable will leak out of it's scope
var yourNamespace = (function(){

    // these variables are local, but can be accessed
    // within every function of your namespace
    var pseudoglobal1 = ["foo","bar"],
        pseudoglobal2 = "123";

        function func1(){
            alert(pseudoglobal1 );
        }
        /*additional functions you need*/

        // functions you want to make public are returned here
        // IMPORTANT: the { must not be on a newline!
        return {
            publicName : func1
        }
})();

通过这种方式,您可以避免讨厌的全局变量,但仍然可以在所有函数中使用重要的变量。

答案 1 :(得分:0)

第三种方式,非常简单的方法: 您可以在与局部变量相同的范围内定义函数。例如,如果您定义一个函数

func3() {
   alert(i1);
}

在函数test()中,这个函数将能够返回i1!

请参阅以下代码:

function test()
{
   var i1 = 10;
   // First way. Passing argument to function
   func3()
   {
      alert(i1);
   }
   func3(); // this will alert i1
}

编辑(删除一些内容): 这被命名为“closure”(内部函数可以访问外部函数的变量),这是一个非常有趣的Javascript概念!