bind 和 call 的区别

bindcall 是用于改变函数执行上下文(this 值)的两种方法,它们在用法和效果上有几个重要的区别:

1. 返回值类型

  • bind 方法:返回一个新的函数,不会立即执行原函数。返回的新函数永久地绑定了指定的 this 值,无论它被如何调用。
  • call 方法:立即调用原函数,并且可以传递参数列表。返回的是原函数调用的结果(函数执行的返回值)。

2. 执行时机

  • bind 方法:不会立即执行原函数,而是返回一个绑定了指定 this 值的新函数。当调用返回的新函数时,它会以绑定的 this 值执行原函数,并且可以传递额外的参数。
  • call 方法:立即执行原函数,并且可以设置函数执行时的 this 值。调用 call 方法时,除了第一个参数设置 this 值外,后续参数会直接作为原函数的参数传递。

3. 参数传递

  • bind 方法:可以在绑定 this 值的同时,预先传递一部分参数。返回的新函数被调用时,传递的参数会与预先传递的参数合并,按顺序传递给原函数。
  • call 方法:第一个参数是设置函数执行时的 this 值。后续参数直接作为原函数的参数列表,传递给原函数。

示例比较

let person = {
  firstName: 'John',
  lastName: 'Doe'
};

function greet(message) {
  console.log(message + ', ' + this.firstName + ' ' + this.lastName);
}

// 使用 call
greet.call(person, 'Hello'); // 输出: Hello, John Doe

// 使用 bind
let boundGreet = greet.bind(person, 'Hi');
boundGreet(); // 输出: Hi, John Doe

在上面的示例中:

  • greet.call(person, 'Hello') 立即调用了 greet 函数,并将 person 对象作为 this 值传递进去,同时传递了 'Hello' 作为函数的参数。
  • greet.bind(person, 'Hi') 创建了一个新函数 boundGreet,它永久地将 this 值绑定到 person 对象,并且预先传递了 'Hi' 参数。调用 boundGreet() 时,输出的结果与直接调用 greet 方法相同。

因此,主要区别在于 bind 返回一个新函数并且不立即执行,而 call 立即执行原函数并设置 this 值。

手撕题题库 文章被收录于专栏

这是我开卷的第一步!!

全部评论

相关推荐

SP0ngeB0b:我来说,你是我见过最美的中国女孩
点赞 评论 收藏
分享
10-08 21:34
淮阴工学院 Java
45min没有自我介绍本来20min就结束了,后面跟面试官闲聊了一会儿1. 写时复制技术了解吗2. ConcurrentHashMap是怎么解决多线程带来的问题的3. volatile关键字底层是怎么实现线程之间变量共享的4. MySQL的InnoDB底层是怎么存储数据的,采用什么数据结构5. 现在有一个表user,有两列A和B,A和B建了一个联合索引,那么现在有以下查询语句,     select A ,B from user where B = ....会不会走联合索引,为什么     select * from user where B=...会不会走联合索引,为什么6. InnoDB的默认隔离级别是什么,他能解决幻读问题吗,能解决哪一部分幻读问题,不能解决哪一部分幻读问题,     为什么7.  现在有一个类A,类A里只有main方法,所有的业务逻辑都写在main方法里,然后打包成jar包,现在想在运行jar包之前,做一些打印日志处理或者发送邮件,回答能不能实现,如果能实现的话,该怎么去实现,如果不能实现,给出理由8.  现在有100个正整数,都是乱序的,那么用什么算法尽可能的快,为什么9.  现在有100条记录,这些记录都是调查问卷的记录,记录的是20-30岁之间的,记录之间是乱序的,现在我想根据年龄字段进行排序,用什么排序算法尽可能的快,为什么结果:勉强通过总结:都知道一点,但是不深,一旦稍微深挖,就支支吾吾,面试官先让我自己评价,然后他说我知识点钻研的不深,但是比他上大学的那时候好多了,然后还提醒我不要只背了点八股,要有自己的理解,然后那两道排序题跟我说了他的用意是不要只学了那么多解决方案,要让解决方案适应业务场景,总的来说收获还是很多的,这个面试官还是很有实力的,他说好多底层的东西都还没问#杭州每刻科技有限公司##25届##秋招#
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务