5.函数

一,函数是什么

对于JavaScript 来说 函数就是把一段代码放在一个盒子里,在我想要用

到这段代码的时,直接执行这段代码就可以了

例如在网页中 有多个类似的结构时 可以用到函数

函数可以减少冗余代码,提高代码的可维护性及可阅读性

二,函数的分类

函数可分为

  • 系统函数 window里面的所有函数都属于系统函数 (console.log() alert() prompt()...)

  • 内置函数 所有的内置对象里面的函数 都叫内置函数 (Math.pow())

  • 自定义函数(自己定义的函数)

 

三,如何定义函数和使用

使用function关键字 定义一个有名字的函数(声明式)

function 函数名(形参,形参...){
    函数体(代码)
}
//声明 具名函数(第一种)
function sayHello(){
    console.log('hello')
}
sayHello() 
//传递参数
function sayHello1(name,age){ //形参是形容的参数 
    console.log('hello'+name+age)
}
sayHello1('李四') //传进的是实参 根据你要的参数个数来传递对应的参数个数
//调用
// sayHi() //报错
// console.log(sayHi); undefined
//具名函数的变种声明 (第二种)
var sayHi = function(){
    console.log('hi')
}
sayHi()

使用new Function方式(赋值式)

var 函数名 = new Function('形参,形参1','函数体')
//定义
var sayBye = new Function('console.log("bye bye!!")')
//调用
sayBye()
//传参
var sayBye = new Function('username','console.log("bye bye!!"+username)')
//调用
sayBye('李四')

区别:声明式可以先调用再定义(预编译)

    而赋值式只能先定义再调用

 

在程序执行之前有个预编译过程

预编译会做的事情

1.他会声明对应的function和var关键词修饰的变量(开辟内存的操作)

2.对应的function的内存空间开辟以后他会将对应的代码块放到其中 等待调用

3.var 修饰的关键词 只会开辟一个空间 并不会进行赋值(默认给他的一个undefined的值)

 

四,return关键词(返回值)

return返回的意思其实就是给函数一个返回值和终断函数(当你调用了return操作后 后面的内容将不再执行)

function sum(a,b){
    return a+b
    console.log('不会执行的代码')
}
console.log(sum(1,2))//返回的对应的1+2的结果

如果没有return关键词 返回的一个undefined的值

 

函数执行过程

1.把对应的开辟的function内存里面的代码块丢给方法栈(执行栈)去执行

2.执行栈就会自动取执行对应的方法 执行完返回对应的结果

3.当前结果返回完毕以后 对应的执行栈里面的内存空间要进行回收(GC)将这个内存空间销毁

五,函数的嵌套

函数内部可以再包含其他函数;函数之间允许相互调用,也允许向外调用, 但是不可以调用同级函数的嵌套函数;

function fn1(){
    console.log('函数1');
    function fn2(){
        console.log('函数2');
        // fn1() 没有结束就是死循环
    }
    function fn3(){
        console.log('函数3');
        //调用函数2
        fn2()
    }
    fn2()
    fn3()
}
fn1()  //函数1 函数2 函数3 函数2 

 

递归算法

递归可以完成所有循环做的事情 (但是递归的效率较低)

递归三要素
  • 找规律

  • 找临界值(没有规律的值)return

  • 自己调自己(在函数内部调用自己的函数)

2 4 6 8 10 第100的值是什么
function fn(n){ //一般情况都会有参数 n表示为位数
    if(n==1){//没规律的(一般在前面或者后面)
        return 2 //返回具体的值
    }else{ //有规律的 返回对应的规律的公式
        return fn(n-1)+2
    }
}
console.log(fn(100))

 

posted @ 2022-08-02 19:43  汪汪队开大会  阅读(50)  评论(0)    收藏  举报