为什么可以在回调中声明函数的参数?

时间:2019-04-18 03:04:37

标签: javascript

我知道测试有两个参数,并且cb参数充满了回调参数('hello',未定义)-但我无法完全理解这一点……有人可以解释吗?在某种意义上?

const test = (addy,cb)=>{
    if (addy){
    cb('hello',undefined)
    }
}

test(true,(one,two)=>{
    console.log(one)
})
    // logs 'hello' to console

2 个答案:

答案 0 :(得分:0)

每个评论:

  

我想我很困惑的是,测试最初如何接受2个参数,但是调用它时却接受了(true,(一个,两个))

这是怎么回事,您是否有嵌套函数。也就是说,cb是被发送到另一个函数的回调(函数)。您可以这样想(即使这可能不是有效的语法):

function test (addy,cb) {
    if (addy){
    cb('hello',undefined)
    }
}

test(true,function cb(one,two){
    console.log(one)
})
    // logs 'hello' to console

或者,即使这样:

function test (addy,cb) {
    if (addy){
    cb('hello',undefined)
    }
}

function callback(one,two){
    console.log(one)
}    // logs 'hello' to console

test(true,callback) // notice, we really only have 2 arguments here

这可能不是正确的语法,但希望您能看到发生了什么事。

答案 1 :(得分:0)

由于这种语法,我认为您感到困惑。请对此进行查看,您已将第二个函数作为无头函数传递了。因此cb是函数的名称,参数是onetwo

在我的回答中,我给函数起了一个名字

  

在调用函数测试first param: true时,addy = true second param: is the function时,cb = function

const test = (addy,cb)=>{
    if (addy){
    cb('hello',undefined)
    }
}

test(true,(one,two)=>{
    console.log(one)
})

// this function is like cb is the name of the function

test(true, function(arg1, arg2){
  console.log('printing arg1 ' + arg1);
  console.log('printing arg2 ' + arg2);
})