1

我有几个 Js 函数说fn1()fn2()fn1()页面加载时会自动调用

<script >

window.onload=fn1();

 function fn1()
 {
  var list_temp=new Array();
  list_temp.push("testing");
  //etc
 }

 function fn2()
 {
   // Do something after getting the data from fn1()
 }
 </script>`

现在我需要访问fn1()from中定义的列表fn2()。有什么办法可以做到吗?我记得在某处读到 Javascript 中的函数在某种程度上等同于对象?

4

5 回答 5

3

简单地声明

var list_temp=new Array();

function fn1 ()

在同一水平

window.onload

在顶级脚本声明的变量是全局变量...在 JS var 范围内是函数...

于 2012-06-06T21:23:04.080 回答
3

您可以在全局范围内定义一个变量,但您也可以将两个函数包装在一个闭包中,并将该变量设为该闭包的私有(本地):

(function() {
   var list_temp = [];
   window.onload = fn1;

   function fn1()
   {
       list_temp.push("testing");
       // etc...
   }

   function fn2()
   {
       console && console.log(list_temp);
       // Do something after getting the data from fn1()...
   }
})();
于 2012-06-06T21:23:54.823 回答
2

window.onload=fn1();

fn1页面加载时不会运行。fn1 立即运行并将其返回值分配给window.onload. 完全一样x = foo();

现在我需要从 fn2() 访问 fn1() 中定义的列表。有什么办法可以做到吗?

不,不是定义的。list_temp是本地的fn1。除非你把它放在fn2可以访问它的地方(一些共享范围),fn2否则不能访问它。

window.onload这是共享范围(并修复事物)的示例:

(function() {
    var list_temp=new Array(); // Or better, var list_temp = [];

    window.onload=fn1; // No () at end

    function fn1()
    {
        list_temp.push("testing");
        //etc
    }

    function fn2()
    {
        // Do something after getting the data from fn1()
    }
})();

或者,当然,你可以使list_temp全局。但这通常不是一个好主意。

于 2012-06-06T21:25:17.910 回答
1

您可以将这些功能链接在一起:

function fn1()
{
 var list_temp=new Array();
 list_temp.push("testing");
 //etc
 fn2(list_temp);
}

function fn2(data)
{
  // Do something after getting the data from fn1()
}
于 2012-06-06T21:26:50.797 回答
0

我记得在某处读到 javascript 中的函数在某种程度上等同于对象?

是的,所有函数都是对象,继承自一个通用的 Function 原型。您可以在它们上设置自己的属性,就像在所有对象上一样,但这对我们没有帮助。

现在我需要从 fn2() 访问在 fn1() 中定义的列表

你不能。的变量声明的list_temp范围是函数,它不能从外部获得。所以你可以

  • 将变量声明移动到对 fn2 可见的范围内
  • 将列表对象导出到 fn2 可见的其他变量。例如,最简单的方法是使用return语句。
于 2012-06-06T21:27:55.253 回答