1

Google マップ API に次のコードがあります。

var TC1image0 = "";
var TC1Intensity0 = "";
if (TC1wind0 < 41) { TC1Intensity0="Low Pressure Area"; TC1image0="lpagoogle.png"; }
else if (TC1wind0 < 63) { TC1Intensity0="Tropical Depression";  TC1image0="tdgoogle.png"; }
else if (TC1wind0 < 88) { TC1Intensity0="Tropical Storm"; TC1image0="tsgoogle.png";}
else if (TC1wind0 < 118) { TC1Intensity0="Severe Tropical Storm"; TC1image0="stsgoogle.png"; }
else if (TC1wind0 < 150) { TC1Intensity0="Typhoon"; TC1image0="tygoogle.png"; }
else if (TC1wind0 < 185) { TC1Intensity0="Severe Typhoon"; TC1image0="stygoogle.png"; }
else { TC1Intensity0="Super Typhoon"; TC1image0="sutygoogle.png"; }

関数を使用する前に、TC1wind6 / TC1Intensity6 / TC1image6 になるまで、必要なたびにコードを繰り返すだけです。これは完全にスペースの無駄です。だから私は関数を使用してコードを変更しようとします:

function Intensity(TCwind, TCIntensity, TCimage) {
if (TCwind < 41) { TCIntensity="Low Pressure Area"; TCimage="lpagoogle.png"; }
else if (TCwind < 63) { TCIntensity="Tropical Depression";  TCimage="tdgoogle.png"; }
else if (TCwind < 88) { TCIntensity="Tropical Storm"; TCimage="tsgoogle.png";}
else if (TCwind < 118) { TCIntensity="Severe Tropical Storm"; TCimage="stsgoogle.png"; }
else if (TCwind < 150) { TCIntensity="Typhoon"; TCimage="tygoogle.png"; }
else if (TCwind < 185) { TCIntensity="Severe Typhoon"; TCimage="stygoogle.png"; }
else { TCIntensity="Super Typhoon"; TCimage="sutygoogle.png"; }
};

そして、私は次のように関数を呼び出します:

var TC1wind0 = 65;
var TC1image0 = "";
var TC1Intensity0 = "";
Intensity(TC1wind0, TC1Intensity0, TC1image0);

正しい結果は、「Tropical Storm」を TC1Intensity0 に格納し、「tsgoogle.png」を TC1image0 に格納する必要があります。ただし、上記の「スペースの浪費」方法として正しい結果は得られません。代わりに、機能が動作していないようです。TC1Intensity0 と TC1image0 の両方が引き続き "" を返します。なぜこれが起こるのですか?

4

2 に答える 2

2

渡す 3 つのパラメーターは単なる文字列であるため、JavaScript はそれらを値で渡します。これはTCwind、関数の内部を変更しても、関数TCwindの外部は変更されないことを意味します。

これを行う最も簡単な方法は、オブジェクトで値を返すことです。

var result = Intensity(65, '', '');
var TCwind = result.TCwind;
var TCimage = result.TCimage;
var TCIntensity = result.TCIntensity;

function Intensity(TCwind, TCIntensity, TCimage) {
    /* snip */
    return {
        TCwind: TCwind,
        TCIntensity: TCIntensity,
        TCimage: TCimage
    };
};

値渡し/参照渡しの詳細については、次の他の質問を確認してください。

于 2013-06-28T12:36:54.747 に答える