为什么在此代码中需要绑定?

时间:2018-01-23 01:20:42

标签: javascript mongodb mongoose

我正在完成入门教程并且我不理解这一行:

db.on('error', console.error.bind(console, 'connection error:'));

来自this tutorial

为什么不做呢

db.on('error', ()=>{
  console.log('connection error:')
});

错误信息在哪里?

1 个答案:

答案 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)