JavaScript—函数
一、函数的概念
在JS中,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用。虽然for循环语句也能实现一些简单的操作,但是比较具有局限性,此时我们就可以使用JS中的函数。
函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。
二、函数的使用
1.声明函数
语法:
function 函数名(){
// 函数体
};
注意:
function 声明函数的关键字,全部小写;
函数名一般为动词;
函数不调用不会执行
2.调用函数
函数名( )
三、函数的参数
形参和实参
function 函数名(形参1,形参2,...){ // 函数体 }; 函数名(实参1,实参2,...);
- 在声明函数的小括号里面是形参(形式上的参数)
- 在函数调用的小括号里是实参(实际的参数)
形参和实参的执行过程
JS代码在执行时,遇到调用函数时,会将实参传递给形参,也就是说,形参相当于一个变量,用于接收实参。
- 函数形参和实参的匹配问题
- 如果函数实参和形参的个数一致,则正常输出结果;
- 如果函数实参的个数多于形参的个数,多余的实参会被舍弃;
- 如果函数实参的个数少于形参的个数,多余的形参会被定义为undefined。
四、函数的返回值 return
语法
function 函数名(){ ... ... return 需要返回的结果; };
- 函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名;
- 只要函数遇到return,就会把后面的结果返回给函数的调用者;
- 函数的调用者为
函数名()
。
注意事项
- return会终止函数;
- return只能返回一个值或者一个数组,返回的结果是最后一个值;(针对数字型)
- 如果函数没有return,返回值为undefined;
- return不仅针对函数,若是函数中有循环并且循环中包含return,return会终止循环并且推出函数。
五、arguments的使用
当我们不确定有多少参数传递的时候,可以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
- arguments以伪数组的形式存储所有实参;
- 伪数组具有数组的length属性;
- 按照索引的方式进行存储;
- 没有真正数组的一些方法,如:pop( ),push ( ) 等等。
- 可以按照数组的方式遍历arguments;
- 只有函数才有arguments对象并且每个函数已经内置了arguments对象。
六、函数的两种声明方式
- 利用函数关键字自定义函数(命名函数)
function 函数名(){
// 函数体
};
- 函数表达式(匿名函数)
var 变量名 = function(){
// 函数体
};
匿名函数使用变量名调用函数。
案例
1.利用函数计算1-100之间的累加和
// 1.声明函数
function getSum(){
var sum = 0;
for (var i = 1; i<=100; i++){
sum += i;
};
};
// 2.调用函数
getSum();
2.利用函数求任意两数的和
function getSum(num1,num2){
return num1 + num2;
};
console.log(getSum(3,7));
// 调用函数的实参可为任意数字
3.利用函数比较两个数的大小
function getMax(num1,num2){
if (num1 > num2){
return num1;
};else if (num1 < num2){
return num2;
};else if (num1 = num2){
return '两个数相等';
};
// 也可以用三元表达式:
// return num1 > num2 ? num1 : num2;
};
console.log(getMax(2,3));
4.利用函数求任意一个数组中的最大值
function getArrMax(arr){
var max = arr[0];
for (var i = 1; i <= arr.length; i++){
if (arr[i] > max){
max = arr[i];
};
};
return max;
};
getArrMax(任意数组);
5.利用函数求任意个数的数字的最大值
function getMax(){
var amx = arguments[0];
for (var i = 1; i < arguments.length; i++){
if (arguments[i] > max){
max = arguments[i];
};
};
return max;
};
getMax(任意个实参);
6.利用函数翻转任意数组
function reverse(arr){
var newArr = [];
for (var i = arr.length - 1; i>=0; i--){
newArr[newArr.length] = arr[i];
};
return newArr;
};
reverse(任意数组);
7.用户输入年份,输出当年2月份天数
function backDay(){
var year = prompt('请输入年份:');
if (isRunYear(year)){
alert(year + '年有29天。');
}; else {
alert(year + '年有28天。');
};
};
function isRunYear(year){
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
flag = true;
};
return flag;
};
backDay();