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

Javascript setTimeout(console.log.bind(console,“something”)是如何工作的?,javascript,Javascript,读完后,我对这个命令的工作原理感到困惑 我尽量不使用setTimeout来包装它,但是控制台日志总是显示日志消息的来源。即使我尝试查看堆栈跟踪,它也没有显示第二行: setTimeout(console.log.bind(console,“something”)做什么? 而且似乎无法删除setTimeout 还有其他方法做同样的事情吗?让我们一件一件地看一下: 什么是console.log.bind(console,“某物”) Function#bind函数创建一个新函数,调用该函数时,将使用

读完后,我对这个命令的工作原理感到困惑

我尽量不使用setTimeout来包装它,但是控制台日志总是显示日志消息的来源。即使我尝试查看堆栈跟踪,它也没有显示第二行:

setTimeout(console.log.bind(console,“something”)
做什么? 而且似乎无法删除setTimeout


还有其他方法做同样的事情吗?

让我们一件一件地看一下:

  • 什么是
    console.log.bind(console,“某物”)

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

  • 什么是设置超时(x,y)

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

  • 综上所述,
    setTimeout(console.log.bind(console,“something”)
    在短暂延迟后安排对
    console.log
    的调用


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

    让我们一块一块地看一下:

  • 什么是
    console.log.bind(console,“某物”)

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

  • 什么是设置超时(x,y)

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

  • 综上所述,
    setTimeout(console.log.bind(console,“something”)
    在短暂延迟后安排对
    console.log
    的调用


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

    我认为我们无法从控制台中删除任何错误。试试console.clear()@Ali我不想删除日志消息,只想知道它是如何工作的。无论如何,谢谢。我想我们无法从控制台中删除任何错误。试试console.clear()@Ali我不想删除日志消息,只想知道它是如何工作的。无论如何,谢谢。但是为什么
    console.log
    需要将
    this
    添加到
    console
    ,绑定和不绑定有什么区别呢?@North:在某些(不是所有)浏览器上,如果调用
    console.log
    时使用错误的
    this
    ,则会失败。(例如Chrome。)显然,在内部,
    console
    对象确实使用
    this
    来引用它自己的属性等。但是为什么
    console.log
    需要将
    this
    添加到
    console
    ,绑定和不绑定有什么区别呢?@North:在一些(并非所有)浏览器上,如果使用错误的
    this
    调用
    控制台.log
    ,则会失败。(例如Chrome。)显然,在内部,
    控制台
    对象确实使用
    这个
    来引用它自己的属性,等等。