let arr=[1,2,3]
Math.max.call(null,1,2,3)//3
Math.max.call(null,arr)//NaN
Math.max.apply(null,arr)//3
Math.max.bind(null,arr)()
call后面传参,apply后面传数组(apply(null,[1,2,3]))
this如果是null,window,undefined都是window
区别:
call,apply,bind使用改变this指向,
call和apply使用改变this指向后,会立刻执行函数;
而bind使用改变this指向后,不 会立刻执行函数,返回函数;
call和bind在使用场景上,如果要修改的this,是当前执行环境的不同this
就不要用call,用bind执行,call执行的环境是当前,bind执行的环境
用call,会使函数体内this改变
问题:
如果函数体里面有this,用call,还是bind好?
用bind好
如果用call修改的this,是当前的执行环境的不同this,
就不要用call,会使函数体内this改变