j**ascript中apply,call和bind的区别

时间:2016.10.13 发布人:weixinggege

j**ascript中apply,call和bind的区别

已解决问题

谷歌weixinggege用户在2016.10.13提交了关于“holdj**ascript中apply,call和bind的区别”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T16:33:01。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,滴水之恩,来日我当涌泉相报 !

希望以下的回答,能够帮助你。

第1个回答

用户名:weibi问答n1971  

有点绕的,下面用代码说明一下这三个函数的区别吧:
varname='global';
varperson={
name:'zero'
};
//输出姓名、年龄和职业
functionprintInfo(age,job){
co尔双愿管明nsole.log(***.name,age,job);
}
//直接调用
printInfo(20,'前端工程师');
//打印:global20前端工程师
//因为默认的上下文是window,所以***.name是全局升硫房属河定义的global,如果我们想前宣问丝想病先并可配打印出来zero的话,就需要改变函数执行的上下文
***.call(person,20,'前端工程师');
printInfo.apply(person,[20,'前端工程师']);
//这两种方式是一样的,第一个参数都是传进去的上下文,***.name取的是***.name,所以打印出来的名字就是zero了,后面的为age和job,只是参数传递的方式不一样,apply比较特殊,把要传的参数放在数组里面
//而bind和以上卷资老西两种有区别,bind是es5定义的新方法,用来返回一个有自己上下文的函数,用法也比较类似:
printInfo.bind(person)(20,'前端工程师');
//printInfo.bind(person)这一块是返回的以peron为上下文的函数,后面的(20,'前端工程师')是函数调用