JavaScript 中有哪些不同的函数调用模式

JavaScript有四种调用模式
介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已。函数:如果一个函数与任何对象关系,就称该函数为函数。方法:如果一个函数作为一个对象属性存在,我们就称之为方法。接下来就可以开始今天的主体。
1、函数调用模式。
就是通过函数来调用,规范写法为:function fn(){} fn(); 函数中this的指向->window

var age = 38;
    var obj = {
        age: 18,
        getAge: function() {
            function foo() {
                console.log(this.age); // 因为是函数调用模式,所以this指向window全局变量,所以输出为38
            }
            // 只看这个函数是怎么调用,不管函数是在哪声明的!
            foo();
        }
    };
    obj.getAge();

2、方法调用模式。就是通过对象的属性来调用,中this的指向->当前对象

var age = 38;
    var obj = {
        age: 18,
        getAge: function() {
            console.log(this.age);// 18
        }
    };
    obj.getAge();//因为是方法调用模式,this指向当前的对象obj。

3、构造函数模式
如果是作为构造函数来调用,那么this就是指向:new创建的新对象
function foo() {
this.name = “123”;
}
var f0 = new foo();
console.log(f0.name) //123
4,apply或call的方式
这两个的第一参数即this,当第一个参数为null,this指向window;当第一个参数为一个对象,this就指向当前这个对象
apply和call第一个参数一样:表示使用那个对象来调用函数;apply第二个参数是:是一个数组或伪数组,数组的值做为函数的参数被传入;call第二个参数是:是基本数据类型(number string boolean)
//1:求一个数组中的最大值
方法一:常规写法

 var arr = [9, 1, 4, 101, 7, 22, 8];
    var maxNum = arr[0],
        i = 1, len = arr.length;

    for(; i < len; i++) {
        if(arr[i] > maxNum) {
            maxNum = arr[i];
        }
    }
    console.log(maxNum);

方法二:使用上下文调用模式(apply);

var arr = [9, 1, 4, 101, 7, 22, 8];
   var maxNum=Math.max.apply(this,arr);
    console.log(maxNum);//101

猜你喜欢

转载自blog.csdn.net/weixin_42937047/article/details/88365537
今日推荐