gpt4 book ai didi

javascript - function.apply.bind 在以下代码中如何工作?

转载 作者:可可西里 更新时间:2023-11-01 02:18:03 24 4
gpt4 key购买 nike

所以我得到一个 [200,599] 的数组从 promise 返回并且 spread 内的回调函数被传递到 Function.apply.bind,但现在我迷路了。 [200,599] 的数组如何拆分为 x 和 y? apply.bind 究竟是如何工作的?

function getY(x) {
return new Promise( function(resolve,reject){
setTimeout( function(){
resolve( (3 * x) - 1 );
}, 100 );
} );
}

function foo(bar,baz) {
var x = bar * baz;

// return both promises
return [
Promise.resolve( x ),
getY( x )
];
}

function spread(fn) {
return Function.apply.bind( fn, null );
}

Promise.all(
foo( 10, 20 )
)
.then(
spread( function(x,y){
console.log( x, y ); // 200 599
} )
)

最佳答案

.apply()是函数对象上的方法。像这样:

console.log(Math.max.apply(null, [1, 2, 3])); // 3

.apply()接受两个参数,上下文(在目标函数中会变成 this)和一个可迭代的参数(通常是一个数组,但是 arguments 数组也可以)。


.bind()是函数对象上的方法。像这样:

const x = {
foo: function() {
console.log(this.x);
},
x: 42
}

var myFoo = x.foo.bind({x: 5});

x.foo(); // 42
myFoo(); // 5

.bind()获取一个上下文(会变成 this )和可选的附加参数,并返回一个新函数,上下文绑定(bind),附加参数被锁定 p>


.apply()本身就是一个函数,它可以绑定(bind).bind() ,像这样:

Function.prototype.apply.bind(fn, null);

意思是this.apply()将是 fn.apply() 的第一个参数将是 null .这意味着它看起来像这样:

fn.apply(null, args)

这将从数组中传播参数。

关于javascript - function.apply.bind 在以下代码中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com