三者都会改变this的指向,区别
    1.call 和 apply 的功能相同,区别在于传参的方式不一样:
    (1).call的第一个参数是this要指向的对象, 第二个,第三个….都是调用函数需要的参数。
    (2).apply第一个参数是this要指向的对象, 第二个参数是数组或类数组。

    1. <script>
    2. // 1. 声明两个变量和一个函数
    3. var username = '张三';
    4. var age = 18;
    5. function say(provice, city) {
    6. console.log('this=', this);
    7. console.log(`我来自${provice}${city}`);
    8. console.log(`我叫${this.username},今年${this.age}岁`);
    9. }
    10. // 2. 创建一个对象
    11. var person = {
    12. username: '老胡',
    13. age: 100
    14. };
    15. say('广东', '深圳');
    16. // 3. 使用call改变this的指向:第一个参数是this将要指向的对象, 第二参数,第三个参数.....,这些参数函数调用需要传入的参数
    17. say.call(person, '广西', '贵港');
    18. // 4. 使用apply改变this的指向:第一个参数是this将要指向的对象, 第二参数是个数组,数组放入的是函数需要的参数
    19. say.apply(person, ['陕西', '西安']);
    20. </script>
    1. 2.bindcall/apply有一个很重要的区别<br /> (1).一个函数被call/apply的时候,会直接调用,但是bind会创建一个心得函数,不会直接调用<br /> (2).当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this, 新函数的调用和原来函数的调用一模一样,除了this的指向不一样之外