阅读后How to hide source of Log messages in Console? ,我对这个命令的工作原理感到困惑。
我尝试不使用 setTimeout 来包装它,但控制台日志始终显示日志消息的来源。即使我尝试查看堆栈跟踪,它也只显示第二行之类的内容:
setTimeout(console.log.bind(console, "something"))
的作用是什么?
而且setTimeout好像不能去掉?
还有其他方法可以做同样的事情吗?
最佳答案
让我们一点一点地来看:
什么是
console.log.bind(console, "something")
?Function#bind
function 创建一个新函数,调用时将使用第一个参数this
来调用原始函数。用于通话并传递任何进一步的论据。所以console.log.bind(console, "something")
创建(但不调用)一个函数,当调用该函数时,该函数将调用console.log
与this
设置为console
并传递"something"
作为第一个参数。什么是
setTimeout(x, y)
?它调度函数
x
在y
之后调用浏览器的毫秒数;如果您不提供y
,默认为0
(当前代码完成后立即回调)。
综合起来,setTimeout(console.log.bind(console, "something"))
安排调用 console.log
经过短暂的延迟后。
使用延迟意味着调用console.log
不会直接从您执行此操作的代码中发生;浏览器调用 console.log
直接,而不是在您的代码中。因此,堆栈跟踪不会显示它发生在您的代码中,因为它没有发生。
关于javascript - setTimeout(console.log.bind(console, "something")) 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37430531/