我一直在用一块砖墙敲打我的头,这一块和另一块都没有成功。我想要做的是访问函数内但在该函数之外的数组中设置的值。怎么可以这样做?例如:
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]);
显然,这将包含在脚本标记中,但我得到的是控制台上的错误,说明:“profile [0]未定义”。
任何人都有任何想法我错了?我似乎无法弄清楚,在将值从函数传递到函数或函数之外时,我所看到的其他解决方案都没有。到目前为止,这些解决方案都没有。
感谢任何可以帮助我的人,这可能是我错过的简单事情!
答案 0 :(得分:4)
由于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]);
答案 1 :(得分:3)
在函数外部声明它,以便外部作用域可以看到它(但要注意全局变量)
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