我有几个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中的函数是否与对象相当?
答案 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_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
全球化。但这通常不是一个好主意。
答案 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
的变量声明的范围是函数,它不能从外部获得。所以你可以
return
语句,例如。