1

我的谷歌地图 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);

正确的结果应该在 TC1Intensity0 中存储“热带风暴”,在 TC1image0 中存储“tsgoogle.png”。然而,它并没有像上面的“浪费空间”方法那样给出正确的结果。相反,该功能似乎不起作用。TC1Intensity0 和 TC1image0 仍然给出“”。为什么会这样?

4

2 回答 2

2

由于您传递的三个参数只是字符串,因此 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 回答
0

更简单的是,您不将变量作为参数传递。比函数会写在全局变量中。

function Intensity(TC1wind0){
[...]
}


var TC1wind0 = 65;
var TC1image0 = "";
var TC1Intensity0 = "";
Intensity(TC1wind0);
于 2013-06-28T12:41:14.800 回答