我正在完成入门教程并且我不理解这一行:
db.on('error', console.error.bind(console, 'connection error:'));
为什么不做呢
db.on('error', ()=>{
console.log('connection error:')
});
错误信息在哪里?
答案 0 :(得分:0)
基本上bind
是一个函数,它从调用它的函数中生成一个新函数,结果函数已经具有特定参数"烘焙在"。
第一个参数bind
期望是特殊的,所以我稍后会回过头来看。从第二个参数开始,这些是你在"烘烤的#s;新功能。
让我们以addTwoNumbers
为例:
function addTwoNumbers(a, b) {
return a + b
}
因为addTwoNumbers
是函数类型的对象,我们可以在其上调用bind
,传递参数,并获得一个新函数。像这样:
var addThree = addTwoNumbers.bind(null, 3) // we have no use for "this" so we simply pass null as the first param
我们的新函数addThree
现在只需要1个参数。它在功能上等同于(出于我们的目的):
function addThree(b) {
return addTwoNumbers(3, b)
}
因此调用addThree(4)
会导致7
。
现在bind
的第一个参数是"烘焙"新函数范围的this
的值。
让我们以此功能为例:
function printTheValueOfThis() {
console.log(this)
}
var printHello = printTheValueOfThis.bind('hello')
printHello() // this will output "hello" to the console
在您的代码段中,相关功能为console.log
和#34;错误信息"绑定到第二个参数
功能等效的代码与您的建议完全不同,它更像是:
db.on('error', (someUnusedArg, errorInfo) => {
console.log('connection error:', errorInfo)
});
很多人都写过bind
函数。如果您想阅读更多内容,可以阅读以下内容:bind Method (Function)