控制台返回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]]
内部方法说明中定义 (相关点以粗体显示):
- 假设funcCtx是使用F的[[FormalParameters]]内部属性的值,传递的参数List args和此值(如10.4.3中所述)为函数代码build立新的执行上下文的结果。
- 让结果成为评估F的[[Code]]内部属性值的FunctionBody的结果。 如果F没有[[Code]]内部属性,或者它的值是一个空的FunctionBody,则结果是(normal,undefined,empty)。
- 退出执行上下文funcCtx,恢复以前的执行上下文。
- 如果result.type是抛出然后扔result.value。
- 如果result.type返回,则返回result.value。
- 否则result.type必须是正常的。 返回undefined。