吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 889|回复: 11
收起左侧

[讨论] JS中call、apply中的区别

[复制链接]
猛浪若奔 发表于 2022-3-17 07:38

Javascript中call、apply

call(context, arg1, arg2)

apply(context, args [])

这两个方法都是改变运行时作用域的,也只有传参方式不同,但是一位面试官问我,他们的作用都是一样的,为什么要设计两个,不是多余的? 我TM,,,,

也没搜到答案,该怎么反驳他

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ykeithou 发表于 2022-3-17 08:22
這個函式的語法和call() 幾乎一樣,最大的不同是 call() 接受一連串的參數,而 apply() 接受一組陣列形式的參數。

這裏有說明
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
momosys 发表于 2022-3-17 08:25
它们的作用一模一样,区别仅在于传入参数形式的不同。
apply接受两个参数,第一个参数指定了函数体内 this 对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可能为类数组,apply 方法把这个集合中的元素作为参数传递给被调用的函数
call传入的参数数量不固定,跟apply相同的是,第一个参数也是代表函数体内的this指向,从第二个参数开始往后,每个参数被依次传入函数

当调用一个函数时,JavaScript的解释器并不会计较形参和实参在数量、类型以及顺序上的区别,JavaScript的参数在内部就是用一个数组来表示的,从这个意义上来说,apply比call的使用率更高,我们不必关心具体有多少参数被传入函数,只要用apply一起推过去就完事了。
call是包装在apply上面的一颗语法糖,如果我们明确地知道函数接受多少个参数,而且想一目了然的表达形参和实参的对应关系,那么也可以用call来传递参数。
jinzhu160 发表于 2022-3-17 08:49
一个传递普通参数,一个传递数组格式的参数,其他好像都一样。
fankangfan 发表于 2022-3-17 08:51
功能都是改变函数调用的this指向,区别就是传的参数格式不同,还有一个bind也比较特殊,call和apply的会立即调用函数,bind就不会
ShyGW 发表于 2022-3-17 09:14
这个啊coderwhy讲过,特别清楚,你可以去看看。
jun85719392 发表于 2022-3-17 09:34
触及到知识盲区了
 楼主| 猛浪若奔 发表于 2022-3-17 11:39
momosys 发表于 2022-3-17 08:25
它们的作用一模一样,区别仅在于传入参数形式的不同。
apply接受两个参数,第一个参数指定了函数体内 this ...

感谢老铁的真知灼见
 楼主| 猛浪若奔 发表于 2022-3-17 11:40
fankangfan 发表于 2022-3-17 08:51
功能都是改变函数调用的this指向,区别就是传的参数格式不同,还有一个bind也比较特殊,call和apply的会立 ...

对,bind不会立即执行
 楼主| 猛浪若奔 发表于 2022-3-17 11:41
ShyGW 发表于 2022-3-17 09:14
这个啊coderwhy讲过,特别清楚,你可以去看看。

哪个章节啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 01:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表