3

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

我有一个局部变量。我想在 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>

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

谢谢,保罗

更新:

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

4

2 回答 2

0

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

Javascript 具有非常强大的功能(一流的成员)。例如,这意味着您可以嵌套它们:

// 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
        }
})();

这样你可以避免讨厌的全局变量,但仍然在你的所有函数中使用你的重要变量。

于 2013-06-20T07:50:20.587 回答
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
}

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

于 2013-06-20T07:50:57.723 回答