数据访问JS功能

时间:2012-06-06 21:18:44

标签: html javascript-events javascript javascript-framework

我有几个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>`

现在我需要从fn2()访问fn1()中定义的列表。无论如何可以做到吗?我记得在某处读取javascript中的函数是否与对象相当?

5 个答案:

答案 0 :(得分:3)

简单地声明

var list_temp=new Array();

function fn1 ()

在同一级别上

window.onload
在顶级脚本中声明的vars是全局的...... 在JS var scope中是函数...

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

  

window.onload=fn1();

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

  

现在我需要从fn2()访问fn1()中定义的列表。无论如何可以做到吗?

不,不是定义的。 list_tempfn1内的本地人。除非您将其放在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全球化。但这通常不是一个好主意。

答案 3 :(得分: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()
}

答案 4 :(得分:0)

  

我记得在某个地方读过javascript中的函数是否与对象相当?

是的,所有函数都是对象,继承自常见的Function prototoype。你可以在所有对象上设置自己的属性,但这对我们没有帮助。

  

现在我需要从fn2()

访问fn1()中定义的列表

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

  • 将变量声明移动到fn2
  • 可见的范围内
  • 将列表对象导出到fn2可见的其他变量。最简单的方法是使用return语句,例如。