我知道这个问题听起来很愚蠢。但我实际上需要帮助。
我有一个局部变量。我想在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>
是否有其他方法可以访问函数内的变量。
谢谢, 保罗
更新
我想从第二个函数访问第一个函数中定义的变量。我将无法更改第二个功能的功能签名。我现在唯一的解决方案是使用全局变量。我只是希望有另一种方法,而不是使用全局变量。
答案 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概念!