javascript中apply,call和bind的区别

 我来答
weixiao800
2017-04-21 · TA获得超过824个赞
知道小有建树答主
回答量:482
采纳率:0%
帮助的人:440万
展开全部

apply与call

apply与call功能是一样的,不同的地方在于方法参数

//apply第二个参数是一个数组
func.apply(thisVal, [arg1, arg2, ...]);
//call则从第二个参数开始为参数列表形式
func.call(thisVal, arg1, arg2, ...);
//用一个例子来描述
//Math.max函数可以返回参数中的最大值
var max1 = Math.max(6, 3, 8, 5);
//如果想找出数组中的最大,apply就派上用场了, 因为Math.max不支持传入数组参数
//apply方法可以把数组中的最大值找出
var array = [6, 3, 8, 5];
var max2 = Math.max.apply(null, array);
//call方法与原来的方法比较类似, 只是多了一个thisVal, 
//因为max函数里没有用到this,所以这里的thisVal可以传任意值
var max3 = Math.max.call(null, 6, 3, 8, 5);

bind

1. apply与call调用会直接返回函数的执行结果, 而bind则返回一个函数

2. 该函数需求传入参数是原函数参数减去bind传的参数(不考虑thisVal的话)

//语法
func.bind(thisVal, arg1, arg2, ...);
//示例
function func(a, b, c)
{
    console.log(a, b, c);
}
var a=1,b=2,c=3;
var bindFunc = func.bind(null, a);//func没有用到this,所以thisVal可以传null
bindFunc(b, c); //注意这里这需要传b和c就可以了
//Math.max使用bind
var maxFunc = Math.max.bind(null, 6, 3);
var max4 = maxFunc(8, 5);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式