为什么JS控制台会返回一个额外的未定义?

时间:2013-08-16 09:50:42

标签: javascript closures undefined

有人可以告诉我这里发生了什么(在Firefox和Chrome中测试过)。

我有一个简单的函数返回一个闭包。

function say (name) {
  var msg = 'hallo';
  return function () {
    console.log(msg, name);
  }
}

var sayName = say('joe');
sayName();

如果检查浏览器控制台,我会得到预期的结果:

Hallo Joe

但是,如果我遗漏最后一行并从控制台运行sayName(),我会得到以下结果:

Hallo Joe
undefined

额外的未定义来自何处?

1 个答案:

答案 0 :(得分:1)

控制台输出您正在执行的函数的返回值。

如果你在函数中放置一个return语句,那么看看会发生什么。

return function () {
    console.log(msg, name);
    return "If you run me from console you'll see this line";
}