Javascript未捕获的参考错误:函数未定义

时间:2015-06-29 01:33:18

标签: javascript

我正在使用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);的日志确实如此。)

1 个答案:

答案 0 :(得分:0)

getSelMag是分配给magnitude的函数的名称,该函数在没有任何参数的情况下立即被调用。所以你留下:

var value = Number(undefined.value)
                   //^ Cannot read property 'value' of undefined
return value

即使您通过论证,我认为您误解了IIFE的使用,也许是一般的功能。名称getSelMag在范围内不可用,变量magnitudeReferenceError: 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