Javascript setTimeout(console.log.bind(console,“something”)是如何工作的?
读完后,我对这个命令的工作原理感到困惑 我尽量不使用setTimeout来包装它,但是控制台日志总是显示日志消息的来源。即使我尝试查看堆栈跟踪,它也没有显示第二行:Javascript setTimeout(console.log.bind(console,“something”)是如何工作的?,javascript,Javascript,读完后,我对这个命令的工作原理感到困惑 我尽量不使用setTimeout来包装它,但是控制台日志总是显示日志消息的来源。即使我尝试查看堆栈跟踪,它也没有显示第二行: setTimeout(console.log.bind(console,“something”)做什么? 而且似乎无法删除setTimeout 还有其他方法做同样的事情吗?让我们一件一件地看一下: 什么是console.log.bind(console,“某物”) Function#bind函数创建一个新函数,调用该函数时,将使用
setTimeout(console.log.bind(console,“something”)
做什么?
而且似乎无法删除setTimeout
还有其他方法做同样的事情吗?让我们一件一件地看一下:
console.log.bind(console,“某物”)
Function#bind
函数创建一个新函数,调用该函数时,将使用第一个参数作为调用的this
调用原始函数,并传递任何其他参数。因此console.log.bind(console,“something”)
创建(但不调用)一个函数,当调用该函数时,它将调用console.log,并将设置为console
,并将“something”
作为第一个参数传递
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”
作为第一个参数传递
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。)显然,在内部,控制台
对象确实使用这个
来引用它自己的属性,等等。