控制台返回undefined

所以我劫持了控制台function

var log = Function.prototype.bind.call(console.log, console); console.log = function (a) { log.call(console, a); submitmsg("Log", a); }; 

这有所期望的效果,但它也返回“未定义”作为一个意外的奖金

我无法弄清楚为什么这会让我觉得这儿有点小毛病

在这里输入图像描述

Hello world是由log.call(console, a)按预期生成的

submitmsg()是我的自定义函数

这正是我想要的,正如我所说,虽然我稍微担心,它也返回“未定义”,因为我不明白的原因。


注意:以下代码由OP发布,作为问题的答案。 对这个问题的评论已经转移到对这个问题的评论上。


所以正确的代码应该是以下的?

 var log = Function.prototype.bind.call(console.log, console); console.log = function (a) { return log.call(console, a); submitmsg("Log", a) }; 

如果我正确地理解了你的问题,那是因为你没有显式地从函数中返回任何东西。 当你不从一个函数返回一个值时,它隐含地返回undefined

例如:

 function example() {} console.log(example()); //undefined 

这在[[Call]]内部方法说明中定义 (相关点以粗体显示):

  1. 假设funcCtx是使用F的[[FormalParameters]]内部属性的值,传递的参数List args和此值(如10.4.3中所述)为函数代码build立新的执行上下文的结果。
  2. 让结果成为评估F的[[Code]]内部属性值的FunctionBody的结果。 如果F没有[[Code]]内部属性,或者它的值是一个空的FunctionBody,则结果是(normal,undefined,empty)。
  3. 退出执行上下文funcCtx,恢复以前的执行上下文。
  4. 如果result.type是抛出然后扔result.value。
  5. 如果result.type返回,则返回result.value。
  6. 否则result.type必须是正常的。 返回undefined。