2017-04-23 10 views
0

私はこのwronfを言い表すかもしれないので、私はまだ学んでいます(これは、私がこれまでの検索で答えを見つけることに何の不運もなかったのかもしれません)すべて一緒に。関数の内部でオブジェクトにアクセスする

基本的には、呼び出されたときにオブジェクト(他のオブジェクトで構成されている)を作成する関数を作成しようとしています。このCharactersオブジェクトを関数の外に作成すると、期待通りにアクセスすることができますが、関数内で実行するとアクセスできないように見えます。私はChromeに組み込まれたコンソールでこれをテストしています。

ここに私のコードです。

function q1(ans) {  //Are you male or female? 
    "use strict"; 
    //store all above objects into new object 
    if (ans === "male") { 
     var Characters = { 
      spike: spike, 
      jet: jet, 
      vicious: vicious 
     }; 
    } 
    if (ans === "female") { 
    //store all above objects into new object 
     var Characters = { 
      faye: faye, 
      julia: julia, 
      ed: ed 
     }; 
    } 
    return Characters; 
} 

(オブジェクトspikejetviciousは(など)他の場所で定義されており、いかなる問題なくアクセスすることができます。)私はq1("male");コンソールがCharactersことをログに記録するようで、私の関数を呼び出す場合

オブジェクトが作成されましたが、私はCharactersと入力してアクセスしようとすると、エラーが発生します(ReferenceError:Characters is not defined)。関数の外でこのCharactersオブジェクトを作成し、上記のようにアクセスしようとすると、うまくいきます。これは、私がそれを適切に返さないと(または、私は完全に何か他の何かをやっている)信じるようになります。私はここで何が欠けていますか?

ありがとうございました。

+1

このようにすると、var Chars = q1( "male") '戻り値は意味をなさぎます – LGSon

+0

これが成立しました。ありがとう。 –

答えて

2

これは範囲によるものです。これは、文字が関数内にしか存在しないため、関数の外でそれにアクセスできないことを意味します。あなたがしなければならないことは、新しい変数を、関数を呼び出すときの関数の戻り値に等しく設定することです。そうすれば、関数の外で返された変数を参照して後で使用することができます。

var male = q1("male") 
+0

それはそうしました。ご説明ありがとうございます。学んだ教訓。 –

0

すでにq1の範囲外の文字が定義されているので、あなたがメソッドから文字を返すことによってCharacters変数を再割り当てする必要があります。

文字を再割り当てしてください。問題が解決するはずです。 もう1つ悪い方法はvar Charactersを使用せず、代わりにCharacters = ...を使用しますが、グローバル変数を使用することをお勧めします。

+1

グローバルな割り当てを提案しないでください。 – Bergi

+0

@Bergiあなたは正しいです、説明を変更しました。 –

関連する問題