阅读How to hide source of Log messages in Console?后,我对此命令的工作原理感到困惑。
我尝试不使用setTimeout来包装它,但是控制台日志总是显示日志消息的来源。即使我试图看到堆栈跟踪,它只是显示没有像第二行:
setTimeout(console.log.bind(console, "something"))
做了什么?
它似乎无法删除setTimeout?
有没有其他方法可以做同样的事情?
答案 0 :(得分:4)
让我们逐件采取:
什么是console.log.bind(console, "something")
?
Function#bind
函数创建一个新函数,在调用时,将使用第一个参数调用原始函数作为调用的this
并传递任何其他参数。因此console.log.bind(console, "something")
创建(但不会调用)一个函数,当 被调用时,将调用console.log
并将this
设置为{{1}并传递console
作为第一个参数。
什么是"something"
?
它安排在浏览器setTimeout(x, y)
毫秒后调用的函数x
;如果您不提供y
,则默认为y
(一旦当前代码完成,立即回电)。
综合起来,0
会在短暂延迟后安排对setTimeout(console.log.bind(console, "something"))
的调用。
使用延迟意味着对console.log
的调用并非直接来自您执行此操作的代码;浏览器直接调用console.log
,而不是代码中。因此,堆栈跟踪不会显示它发生在您的代码中,因为它没有。