一、认识函数
1.什么是函数?
函数:函数就是封装了一段可被重复调用执行的代码块,通过此代码块可以实现大量代码的重复使用。
函数的使用只需要2步:
(1)定义函数;
(2)调用函数;
2.函数的定义
函数在使用前,必须用function关键字来定义函数。
- function声明函数的关键字,全部小写
- 函数是做某件事情,函数名一般是动词
- 函数不调用,自己不执行
- 调用函数的时候不要忘记加小括号
3.函数的参数
在声明函数是,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数是,同样也需要传递相应的参数,这些参数被称为实参。
参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去。
函数形参实参匹配(在JavaScript中,如果形参不传值,默认是undefined)
1.如果实参的个数和形参的个数一致,则正常输出结果
2.如果实参的个数多余形参的个数,则会渠道形参的个数
3.如果实参的个数小于形参的个数,多余的形参定义为undefined,最终的结果是NaN
4.函数的返回值(return)
函数只是实现某种功能,最终的结果需要返回给函数的调用者,通过return来时间
只要函数遇到return,就把后面的结果 返回给函数的调用者,函数名()= return 后面返回的结果
终止函数,return 后面的代码将不会被执行,且只能返回一个值
函数如果有return,则返回return后面的值。如果函数没有return,则返回undefined
练习:求任意两个数的 加减乘除
function getResult(num1, num2) {
return [num1 + num2, num1 * num2, num1 - num2, num1 / num2];
}
var re = getResult(21, 34);
console.log(re);
通过数组的方式来返回多个值 return[ , , ]
5.arguments的使用
当我们不知道有多少个参数传递的时候,可以用arguments来获取,在javaScript中,arguments实际上他是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中存储中存储了传递的所有实参。
只有函数才有arguments函数,每个函数都是提前内置好了arguments
function fn(){
console.log(arguments);//里面存储了所有传递过来的实参
console.log(arguments.length);
}
fn(1,2,3)
//伪数组,并不是真正意义上的数组;
//1.具有数组的length属性
//2.按照索引的方式进行存储
//3.他没有真正数组的一些方法push()、pop()等。
练习:求任意个数的最大值
function getMax(){
var max=arguments[0];
for(var i=1;i<=arguments.length;i++){
if(arguments[i]>max){
max = arguments[i];
}
}
return max;
}
console.log(getMax(1,2,3));
console.log(getMax(1,2,3,1,234,45,75));
练习:利用函数判断是否为闰年
//利用函数判断是否是闰年
function isRunYear(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
} else flag = false;
return flag;
}
console.log(isRunYear(2001));
6.函数的声明方式
1.利用函数关键字自定义函数(命名函数)
function fn(){ }
2.函数表达式(匿名函数)
var fun=function(){
}
注意:这里的fun是变量名,不是函数名
二、预解析
1.Js引擎运行Js分为两步:预解析、 代码执行
(1).预解析,js引擎会把js里面所有的var 还有function提升到当前作用域的最前面
(2).代码执行,按照代码书写顺序从上往下执行
2.预解析分为 变量预解析(变量提升)和 函数预解析(函数提升)
(1)变量提升,就是把所有的变量声明提升到当前作用域的最前面,不提示赋值操作
(2)函数提升,把所有的函数声明提升到当前作用域的最前面,不调用函数,函数表达式调用必须写在函数声明的后面。
f1();
console.log(c);
console.log(b);
console.log(a);
//输出9 9 9 9 9 (最后一个报错)
function f1(){
var a=b=c=9;
//相当于 var a=9;b=9;c=9;b和c直接赋值,没有var声明,当全局变量看
console.log(a);
console.log(b);
console.log(c);
}