4、函数(上)

126 阅读2分钟

1、函数介绍

  • 函数概念: 将任意代码封装到一起,需要用的时候进行调用执行
  • 语法
 // 函数定义
  function 函数名(){
       函数体 //封装的代码
 }
 //函数调用语句:
 函数名()
如: 定义一个求最大值的函数         
function max(){
    var m = 34
    var n = 23
    var max = m
    if(max < n){
     max = n
 }
  console.log('最大值',max)
 }
 max() // 调用函数执行
  • 调用方式 1.jpeg

2、函数参数

  • 参数分类
  • 形参: 定义函数时,在函数名括号中定义的变量,故直接省略var
    

就是在函数内部可以使用的变量,在函数外部不能使用 形参的值是在函数调用的时候由实参决定的

  • 实参:在函数调用的时候给形参赋值的,
    

也就是说,在调用的时候是给一个实际的内容的 多个参数的时候,是按照顺序一一对应的

图像.png

  • 传参过程

图像 (2).png

  • 参数个数

  • 形参比实参少:- 因为是按照顺序一一对应的,行参少就会拿不到实参给的值,所以在函数内部就没有办法用到这个值
    

    图像 (3).png

  • 形参比实参多:因为是按照顺序一一对应的,所以多出来的行参就是没有值的,就是 undefined
    

    图像 (4).png

  • 参数默认值

    图像 (5).png

3、函数返回值

  • return 返回的意思,其实就是给函数一个 返回值 和 终断函数
  • 图像 (6).png
  • 终断函数
    • 当我开始执行函数以后,函数内部的代码就会从上到下的依次执行
    • 必须要等到函数内的代码执行完毕
    • 而 return 关键字就是可以在函数中间的位置停掉,让后面的代码不在继续执行
  • 返回值:return 关键字就是可以给函数执行完毕一个结果 图像 (7).png

4、函数类型

图像.png

5、函数优点

 1. 封装代码,使代码更加简洁
 2. 复用,在重复功能的时候直接调用就好
 3. 代码执行时机,随时可以在我们想要执行的时候执行

6、函数定义方式

声明式函数定义
function fn(){
}
函数表达式, 也称赋值式函数定义
var fn = function(){
}

7、预解析

  • js代码执行解析过程

  • 预解析
    =>浏览器javascript引擎解析执行javascritp代码, 执行javascritp代码
    之前,扫描通读js代码,如果发现声明式函数和var声明的变量,将其提前,
    只是把声明提前,后赋的值并不会
    

    图像 1.png

  • 需要解释的内容有两个:声明式函数名和var变量名相同时,函数优先
    

    图像 (4).png

图像 (2).png

  • 同名变量和函数解析方式 预解析,如果遇到同名变量和函数,函数优先

    图像 (6).png

  • if条件不管成不成立语句块都会解析

    图像 (7).png

  • return语句后代码不执行,但会进行预解析

    图像 (8).png

8、练习

  1. 求12345*...99100 的乘积
1.1*2*3*4*5*...*99*100 的乘积
     function fn(){
         var product=1
         for(var i=1;i<101;i++){
             product=product*i
            }
        document.write(product);
        }
    fn()
  1. 求斐波那契数列、输出数列中的第8个数?
 2、递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ...  
        function feb(n){
            if(n==1 || n==2){
                return 1
            }
            return feb(n-1)+feb(n-2)
        }
        n=10
        document.write('斐波拉契数列的前'+n+'个数为:')
        for(var i=1;i<=n;i++){
            document.write(feb(i)+' ')
        }
        n=8
        document.write('斐波拉契数列的第'+n+'个数为 '+feb(n)+'<br>')
  1. 百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只
3、百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3document.write( '<br>'+'---11、百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只---'+'<br>')
        function buyChecken(){
            for(var x=1;x<20;x++){
                for(var y=1;y<34;y++){
                    z=100-x-y
                    if(100==5*x+3*y+z/3){
                        document.write(x+'  '+y+'  '+z+'<br>')
                    }
                }
            }
        }
        buyChecken()

4.求100-200内的质数 质数,除了1和自身外不能被其它数整除的数

4、求100-200内的质数 质数,除了1和自身外不能被其它数整除的数
        document.write( '<br>'+'---12、求100-200内的质数 质数,除了1和自身外不能被其它数整除的数---'+'<br>')
        function getPrimeNumber(){
            for(var n=100;n<201;n++){
                for(var i=2;i<n;i++){
                    if(n%i==0){
                        break
                    }
                }
                if(n==i)
                document.write(n+' ')
            }
        }
        getPrimeNumber()
  1. 求所有水仙花数 水仙花数定义: 水仙花数是一个三位数,各位立方之和等于它本身
        document.write( '<br>'+'---13. 求所有水仙花数---'+'<br>')
        function getNN(){
            for(var n=100;n<1000;n++){
                x=parseInt(n/100)
                y=parseInt(n/10)-x*10
                z=n-x*100-y*10
                if(n==x*x*x+y*y*y+z*z*z){
                    document.write(n+' ')
                }
            }
        }
        getNN()    

6、面试传参题:最后输出abc,fun()中的data只是实参,代表具体值,并非指变量data,具有迷惑性

图像.png