【问题标题】:Why does the JS console return an extra undefined? [duplicate]为什么 JS 控制台会返回一个额外的 undefined? [复制]
【发布时间】:2013-08-18 16:41:56
【问题描述】:

谁能告诉我这里发生了什么(在 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

额外的未定义从何而来?

【问题讨论】:

  • 因为控制台会尝试帮助您记录表达式的结果。如果您在控制台中运行3 + 4,它将记录7。这并不奇怪。
  • @Ashwin,代码的最后一行sayName();。 @DCoder,我以前从未注意到这一点,这就是为什么它令人惊讶。感谢您的回答。
  • sayname 没有返回语句,因此它返回 undefined

标签: javascript closures undefined


【解决方案1】:

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

看看如果你在你的函数中加入一个return语句会发生什么,例如

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

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多