八、函数
(一)函数导读
(二)函数的概念及使用
函数:封装了一段可以重复执行的代码块,只对外界提供一个简单的接口.
目的:让大量代码重复使用
函数使用时分为两步:1.声明函数. 2.调用函数
声明函数的关键字: function
function 函数名(参数){ 函数体 }
函数是做某件事情,函数名一般是动词.
调用函数:千万不要忘记加小括号
函数名(参数);
案例:求1-100之间的累加和
function getSum(){ var sum=0; for(var i=1;i<=100;i++){ sum+=i; } console.log(sum); } getSum(); //调用函数
(三)函数的参数
可以利用函数的参数实现函数重复不同的的代码.
语法:
function 函数名(形参1,形参2){ 函数体; } 函数名(实参1,实参2);
如:
function cook(aru){ //形参不需要写var,可直接赋值 console.log(aru); } cook('酸辣土豆丝');
形参:形式上的参数,函数定义的时候传递的参数,当前并不知道是什么
实参:实际上的参数,函数调用的时候传递的参数,实参是传递给形参的.
多个参数之间用逗号隔开.
形参是不用声明的变量.
形参和实参个数不匹配的问题:
-
如果形参和实参个数一致,则正常输出结果.
-
如果实参的个数多于形参的个数,会取到形参的个数
-
如果实参的个数小于形参的个数,没传值的会设为undefined.输出可能是NaN
我们尽量让形参的个数和实参匹配.
(四)函数的返回值return
有的时候我们希望函数将值返回给用户,此时通过return语句就可以实现.
语法:
function 函数名(){ 函数体; return 返回值; } var a=函数名();
案例:利用函数求数组[5,2,99,101,67,77]的最大值
arr=[5,2,99,101,67,77]; function getMax(arr){ var max=arr[0]; for(var i=0;i<arr.length;i++){ if(max<arr[i]) max=arr[i]; } return max; } var max=getMax(arr); //将数组名传进去
注意:
-
return除了可以返回值,还可以终止函数.即:函数在运行return之后就不会再执行.
-
return一次只能返回一个值.如果需要返回多个值,可以将它们封装为数组.
-
函数如果没有return,它的返回值为undefined
(五)arguments的使用
当我们不确定有多少个参数传递时,可以用arguments来获取。在JavaScript中,arguments实际上是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中存储了传递的额所有实参。
语法:
function fn(){ //不写形参 console.log(arguments); //里面存储了所有传递过来的实参 console.log(arguments.length); console.log(arguments[0]); for(var i=0;i<arguments.length;i++){ console.log(arguments[i]); } } fn(1,2,3);
arguments展示形式是一个伪数组,因此可以进行遍历.
伪数组并不是真正的数组.它具有以下特点:
-
具有length属性
-
按索引方式存储数据
-
不具有数组的push,pop等方法.
只有函数才有arguments对象,而且每个函数都内置了arguments对象.
案例:利用函数求任意个数的最大值.
function getMax(){ var max=arguments[0]; for (var i = 0; i < arguments.length; i++) { max=max<arguments[i] ? arguments[i] : max; } return max; } console.log(getMax(1,2,3)); console.log(getMax(1,2,3,4,5)); console.log(getMax(11,2,34,444,5,100));
(六)函数案例
-
利用函数反转数组
利用re[re.length];
function reverse(arr){ var re=[]; for(var i=0;i<arr.length;i++){ re[re.length]=arr[arr.length-i-1]; } return re; } console.log(reverse([1,2,3,4,5]));
-
函数封装冒泡排序(sort排序)
function sort(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length;j++){ if(arr[j]>arr[j+1]){ var n=arr[j]; arr[j]=arr[j+1]; arr[j+1]=n; } } } return arr; } console.log(sort([1,2,3,5,4]));
函数可以调用另一个函数
(七)函数的两种声明方式
-
利用函数关键字来自定义函数.
function fn(){ } fn();
-
函数表达式(匿名函数)
var 变量名 = function(){};
如:
var fun=function(){ console.log('我是函数表达式'); } fun();
这里的fun是变量名,不是函数名,所以这个函数是匿名函数.
函数表达式声明方式和声明变量差不多,只不过变量存的是值,函数表达式里存的是函数.