场景:Math.max
()返回给定的一组数字中的最大值,如果是数值数组,怎么从数组中返回最大值?
措施:1.使用Math.max.apply(null, numArray);numArray
为任意长度的数组
2.使用最新的扩展语句展开语法 Math.max(...arr);
扩展延申:call,apply,bind的区别?
call
跟apply
的用法几乎一样,唯一的不同就是传递的参数不同,call
只能一个参数一个参数的传入。 apply
则只支持传入一个数组,哪怕是一个参数也要是数组形式。最终调用函数时候这个数组会拆成一个个参数分别传入。
bind
方法,他是直接改变这个函数的this
指向并且返回一个新的函数,之后再次调用这个函数的时候this
都是指向bind
绑定的第一个参数。bind传参
方式跟call
方法一致。
const obj = {} function test(...args) {console.log(args)} const newFn = test.bind(obj, '静态参数1', '静态参数2') newFn('动态参数3', '动态参数4')
总结:
- 当我们使用一个函数需要改变
this
指向的时候才会用到call
`apply`bind
- 如果你要传递的参数不多,则可以使用
fn.call(thisObj, arg1, arg2 ...)
- 如果你要传递的参数很多,则可以用数组将参数整理好调用
fn.apply(thisObj, [arg1, arg2 ...])
- 如果你想生成一个新的函数长期绑定某个函数给某个对象使用,则可以使用
const newFn = fn.bind(thisObj); newFn(arg1, arg2...)