我正在使用Google Maps API创建一个显示地震的地图,我正在尝试创建一个下拉框,以便用户可以设置显示的最小地震幅度,我一直在有一些问题。
创建下拉框的代码:
controlText.innerHTML = "<select id='selMag' onchange='getSelMag(this)'>" +
"<option value='1.0'>Select Minimum Magnitude</option>" +
"<option value='1.0'>1.0</option>" +
"<option value='2.0'>2.0</option>" +
"<option value='3.0'>3.0</option>" +
"<option value='4.0'>4.0</option>" +
"<option value='5.0'>5.0</option>" +
"<option value='6.0'>6.0</option>" +
"<option value='7.0'>7.0</option>" +
"<option value='8.0'>8.0</option>" +
"<option value='9.0'>9.0</option>" +
"<option value='10.0'>10.0</option>" +
"</select>"
从代码中获取值的代码:
var value;
var magnitude = (function getSelMag(sel) {
var value = Number(sel.value);
return value;
})();
console.log(magnitude);
使用此代码时出现此错误:http://i.imgur.com/7cCifkE.png
(注意:第15行var value = Number(sel.value);
第18行是})();
,并且onchange行应该是显而易见的。另外,我尝试将var value = Number(sel.value);
替换为var value = 1;
以查看它是否会显示在console.log(magnitude);
的日志确实如此。)
答案 0 :(得分:0)
getSelMag
是分配给magnitude
的函数的名称,该函数在没有任何参数的情况下立即被调用。所以你留下:
var value = Number(undefined.value)
//^ Cannot read property 'value' of undefined
return value
即使您通过论证,我认为您误解了IIFE的使用,也许是一般的功能。名称getSelMag
在范围内不可用,变量magnitude
是ReferenceError: getSelMag is not defined
。如果要在作用域中使用名为getSelMag
的函数,可以使用函数声明:
function getSelMag(sel) {
var value = Number(sel.value)
return value
}
或函数表达式:
var getSelMag = function(sel) {
...
}
请注意,函数具有name
属性:
var baz = function foo() {}
baz.name // foo
以上,baz
在范围内,而非foo
。