1.函数的两种声明函数的方式:

1.函数声明方式声明函数:

  function 函数名+(形参){

    语句...

}

 调用函数:函数名(实参);

2.函数表达式声明:

  var 变量名(也是调用函数时的函数名) = function (形参){

    语句...

}

  调用函数:变量名(函数名)+(实参);

2.函数的实参跟形参时一一匹配的,当函数的实参数量与函数形参数量不匹配时:

1.当函数的实参数量大于形参的数量时,则多出的实参不会被传入函数;

例如:

 
        function fn2(a, b) {
            let num = a + b;
            console.log(num);
        }
        fn2(1, 2, 3);

 

  结果num输出为3;
  这里1指向a,2指向b,3没有对应的形参指向,所以不传入函数

2.当函数的实参数量小于形参的数量时,则函数多出的形参没有对应实参匹配,该形参再函数内输出为undefined;

例如:
        function fn3(a,b,c){
            let sum = a +b+c;
            console.log(sum);
            console.log(a,b,c);//c为undefined
        }
        fn3(1,2);

 3.构造函数

1.构造函数的声明方式:

  function Fn(形参){

    this.形参 = 形参;

}

函数首字母大写,函数内部要有this指向

例如:

function Gfn(name, age, sex,sing) {//如函数形参缺失name,则输出为空字符
             this.name = name;//如缺失这行, console.log(gfn.name)输出为undefined;
     this.age = age; 
     this.sex = sex; 
     this.sing = function (song){ 
                console.log('song'); 
}     
}                          

 

此时构造函数不像普通函数一样,不是调用函数,而是使用new关键字来创建一个对象,也称为对象的实例化

例如:

var gfn = new Gfn('刘德华', 18, "男");
  console.log(gfn.name);//刘德华

这就叫做对象的实例化,此时构造函数的实参与形参也是一一对应的,刘德华指向name,18指向age等等,

我们还可以创建另外一个对象,如:

var zxy  = new Gfn('张学友',19,'男');
   console.log(zxy.name);

同样也是对象的实例化.