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]);

明らかにそれはscriptタグに含まれていますが、私が得ているのは「profile[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 に答える