一、认识函数

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);
        }