Math.max()只能传数字,可以使用apply将数组转为一个一个参数传入

发布时间 2023-11-15 22:07:03作者: 龙陌

以下对call() 和 apply() 说法哪些是正确的 ()

A
apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组;

B
非严格模式,如果第一个参数是null,则使用全局对象代替;

C
call和apply的意思一样,只不过是参数列表不一样.

D
通过apply可以将数组装换为参数列表的集合

正确答案:ABCD

apply,call,bind的用法和区别(方法劫持)

用途:手动改变this的指向

区别:1.apply和call会使当前函数立即执行,bind会返回一个函数,后续需要时再调用

  1. call是apply的语法糖,只有传的参数不同,call中要传多个任意参数,apply只可以直接传数组或者类数组

  2. bind是为函数绑定一个this上下文

规则: fn.apply(上下文环境,执行所需数组)

   fn.call(上下文环境,执行所需单个参数) 

   fn.bind(上下文环境) 

ps:如果上下文的值为null,则使用全局对象代替,相当于没传上下文还用以前的

apply可以将一个数组转换为一个参数列表([p1,p2,p3]转换为p1,p2,p3)

  var arr=[1,2,3,4]  
  console.log (Math.max.apply(null,arr))//4  

Math.max()只能传数字,可以使用apply将数组转为一个一个参数传入

如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。

将数组装换为参数列表的集合

因为Math.max 参数里面只支持Math.max(param1,param2,param3…),所以可以根据刚才apply的这一特点来解决

var max = Math.max.apply(null,array) === Math.max(param1,param2,param3…);

这样轻易的可以得到一个数组中最大的一项(apply会将一个数组装换为一个参数接一个参数的传递给方法)