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);
同样也是对象的实例化.