4

我整晚都在用这个和另一个把头从砖墙上敲下来,但没有成功。我想做的是访问在函数内但在该函数之外的数组中设置的值。怎么可能做到这一点?例如:

function profileloader()
{
    profile = [];
    profile[0] = "Joe";
    profile[1] = "Bloggs";
    profile[2] = "images/joeb/pic.jpg";
    profile[3] = "Web Site Manager";
}

然后,我会在段落标签内的页面下方有类似的内容:

document.write("Firstname is: " + profile[0]);

显然,这将包含在脚本标记中,但我得到的只是控制台上的一个错误,说明:“未定义配置文件 [0]”。

有人知道我哪里出错了吗?我只是似乎无法弄清楚,到目前为止,我在将值从函数传递到函数或函数外部时看到的其他解决方案都没有奏效。

感谢任何可以帮助我的人,这可能是我错过的简单事情!

4

2 回答 2

6

在函数外部声明它,以便外部范围可以看到它(但要小心全局变量)

var profile = [];
function profileloader(){
    profile[0] = "Joe";
    profile[1] = "Bloggs";
    profile[2] = "images/joeb/pic.jpg";
    profile[3] = "Web Site Manager";
}

或者让函数返回它:

function profileloader(){
    var profile = [];
    profile[0] = "Joe";
    profile[1] = "Bloggs";
    profile[2] = "images/joeb/pic.jpg";
    profile[3] = "Web Site Manager";
    return profile;
}

var myprofile = profileloader(); //myprofile === profile
于 2012-05-23T05:40:23.013 回答
6

由于var前面没有profile=[];,它存储在全局窗口范围内。

我怀疑是您在使用它之前忘记调用 profileloader() 。

良好的做法是以明显的方式声明全局变量,如本页其他答案所示

依赖副作用并不被认为是好的做法。


注释代码以显示发生了什么,注意不推荐的方法:

这应该有效。它确实有效:DEMO

function profileloader()
{
    profile = []; // no "var" makes this global in scope
    profile[0] = "Joe";
    profile[1] = "Bloggs";
    profile[2] = "images/joeb/pic.jpg";
    profile[3] = "Web Site Manager";
}
profileloader(); // mandatory
document.write("Firstname is: " + profile[0]);
于 2012-05-23T05:49:59.147 回答