call和apply和bind的区别

call和apply和bind的区别

@(前端)


"use strict"//->告诉当前浏览器接下来的js代码将按照严格模式编写
    var obj={name:"zhufen"};
    function fn(num1,num2){
    console.log(num1+num2);
    console.log(this);
}
fn(100,200);//this->window num1=100 num2=200
fn.call(100,200);//this->100 num1=200 num2=undefined  num1+num2=NaN
fn.call(obj,100,200);//this->obj num1=100 num2=200 call方法执行时所传入的第一个参数是谁 this就是谁 第二个及以后的参数就是fn执行时传入的形参值。
fn.call();//this->window
fn.call(null);//this->window
fn.call(undefined);//this->window
//如果不写或者写null或undefined this为window
以上都为非严格模式下

严格模式下
fn.call();//this->undefined
fn.call(null);//this->null
fn.call(undefined);//this->undefined

apply

apply和call方法的作用是一模一样的,都是用来改变方法的this关键字并且把方法执行:而且在严格模式下和非严格模式下对于第一个参数是null/undefined这种情况的规律也是一样的;

fn.call(obj,100,200);
fn.apply(obj,[100,200]);//call在给fn传递参数的时候,是一个个的传递值的,而apply不是一个个传,而是把要给fn传递的参数值统一的放在一个数组中进行操作->但是也相当于一个个给fn的形参赋值,call跟apply的惟一区别


//bind:这个方法在IE6~8下不兼容->和call/apply类似,都是用来改变this关键字的

//fn.call(obj,1,2);->改变this和执行fn函数一起都完成了
fn.bind(obj,1,2);//->只是改变了fn中的this为obj,并且给fn传递了俩个参数值1,2,但是此时并没有把fn这个函数执行

//->预处理:事先把fn的this改变为我们想要的结果,并且把对应的参数值也准备好,以后要用到了,直接的执行即可
    var tempFn = fn.bind(obj,1,2);
    tempFn();//执行bind会有一个返回值,这个返回值tempFn就是我们把fn的this改变后的那个结果;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值