bind传参和直接传参的优先级如何?

如下面的代码,test函数内打印入参root,在runTest里return 一个test的bind,bind时给test传参为字符串'root'。

然后我调用runTest(),它的调用结果是test函数的引用,但是是bind过后的。

此时我再给它传入false:runTest()(false)。

打印出来的是bind时传的参数:'root',而不是我后来传入的false,这是因为bind传参比调用时传参的优先级高吗?

function test(root) {
    console.log(root)
}
function runTest() {
    return test.bind(null, 'root')
}

runTest()(false)
// root
阅读 3k
2 个回答

不是哦,false 会作为第二个参数传递给 test 函数。

function test(root, b) {
    console.log(root, b)
}
function runTest() {
    return test.bind(null, 'root')
}

runTest()(false)
// root false

不是,bind是返回一个函数,简单的实现了一下bind.你的runTest返回的函数,参数是写死的root,所以肯定不会打印false。

Function.prototype.myBind = function () {
    var _this = this
    var ctx = Array.prototype.shift.apply(arguments) 
    var argu = arguments
    return function() {
        return _this.apply(ctx, argu)
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题