首页 > 试题广场 >

以下对call() 和 apply() 说法...

[不定项选择题]
以下对call() 和 apply() 说法哪些是正确的  ()
  • apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组;
  • 非严格模式,如果第一个参数是null,则使用全局对象代替;
  • call和apply的意思一样,只不过是参数列表不一样.
  • 通过apply可以将数组装换为参数列表的集合

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

用途:手动改变this的指向

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

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

3. 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将数组转为一个一个参数传入

发表于 2019-09-29 19:52:11 回复(2)
将数组装换为参数列表的集合
因为Math.max 参数里面只支持Math.max(param1,param2,param3…),所以可以根据刚才apply的这一特点来解决 
var max = Math.max.apply(null,array) === Math.max(param1,param2,param3…);
这样轻易的可以得到一个数组中最大的一项(apply会将一个数组装换为一个参数接一个参数的传递给方法)
发表于 2019-09-14 15:10:49 回复(2)
个人观点: 严谨一点来说感觉不应该理解为"相当于没传上下文还用以前的"
对一个对象内的函数使用apply的时候
let obj = {a:1,b:2,c:function(){console.log(this)}}
obj.c()//输出{a: 1, b: 2, c: ƒ}
obj.c.apply(null) //输出Window
另外 在严格模式下apply(null) 上下文对象就变成null apply(undefined)上下文对象就变成undefined 也就是说第一个参数是什么 他的上下文对象就变成什么
"use strict"

function sum() {
    console.log(this)
}
sum.apply(null) //输出null
sum.apply(undefined) //输出undefined
sum.apply(1) //输出1
sum.apply("haha") //输出"haha"
顺便提一嘴 不使用严格模式的时候输出如下:
function sum() {
    console.log(this)
}
sum.apply(null) //输出Window对象
sum.apply(undefined) //输出Window对象
sum.apply(1) //输出Number对象Number {1}
sum.apply("haha") //输出String对象String {"haha"}




编辑于 2020-02-25 11:01:17 回复(1)

一文理解call和apply,替大家搬运,不用百度了

https://wy310.cn/2019/12/18/what-is-call-and-apply/

发表于 2019-12-29 12:55:20 回复(0)
为什么需要改变指向啊
发表于 2022-03-17 13:10:25 回复(0)
请问“装换”是什么意思?
发表于 2021-03-03 18:00:21 回复(1)
B选项不对吧?是不是全局对象应该看它是否是严格模式,严格模式下是undefined,非严格模式下是global或者window
发表于 2019-10-09 15:22:32 回复(4)
审题
发表于 2022-03-15 07:51:59 回复(0)
apply是call的语法糖,可以将数组转换为元素集合
发表于 2021-06-26 16:28:12 回复(0)
我所了解的,这两个就是改变this指向和调用函数而已
发表于 2020-06-04 21:35:30 回复(0)

对B不是很理解

发表于 2019-11-29 00:49:12 回复(0)
求解析
发表于 2019-09-10 17:13:22 回复(2)