setTimeout(console.log.bind(console,“something”))如何工作?

时间:2016-05-25 07:31:15

标签: javascript

阅读How to hide source of Log messages in Console?后,我对此命令的工作原理感到困惑。

我尝试不使用setTimeout来包装它,但是控制台日志总是显示日志消息的来源。即使我试图看到堆栈跟踪,它只是显示没有像第二行: enter image description here

setTimeout(console.log.bind(console, "something"))做了什么? 它似乎无法删除setTimeout?

有没有其他方法可以做同样的事情?

1 个答案:

答案 0 :(得分:4)

让我们逐件采取:

  1. 什么是console.log.bind(console, "something")

    Function#bind函数创建一个新函数,在调用时,将使用第一个参数调用原始函数作为调用的this并传递任何其他参数。因此console.log.bind(console, "something")创建(但不会调用)一个函数,当 被调用时,将调用console.log并将this设置为{{1}并传递console作为第一个参数。

  2. 什么是"something"

    它安排在浏览器setTimeout(x, y)毫秒后调用的函数x;如果您不提供y,则默认为y(一旦当前代码完成,立即回电)。

  3. 综合起来,0会在短暂延迟后安排对setTimeout(console.log.bind(console, "something"))的调用。

    使用延迟意味着对console.log的调用并非直接来自您执行此操作的代码;浏览器直接调用console.log,而不是代码中。因此,堆栈跟踪不会显示它发生在您的代码中,因为它没有。