函数(上)

65 阅读3分钟

函数介绍

概念

将任意代码封装到起,需爱用的时候进行调用执行

语法

//函数定义
function 函数名() {
    函数体   //封装的代码
}

//函数调用语句:
函数名 ()

函数参数

形参:

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

实参:

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

    //形参
    function 函数名(形参1,形参2...) {
        函数体
    }
    
    //实参
        函数名(实参1,实参2...)
    

参数个数

形参比实参少

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

function fn(num1, num2) {
    //函数内部可以使用 num1 和 num2
}

//本次调用的时候,传递了两个实参,100 200 和 300
// 100 对应了numl, 200 对应了num2, 300 没有对应的变量
//所以在函数内部就没有办法依靠变量来使用 300 这个值
fn(100, 200, 300)

实参比形参少

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

function fn(num1, num2, num3) {
    //函数内部可以使用numl num2 和num3
}

//本次调用的时候,传递了两个实参,100 和 200
//就分别对应了numl 和num2
//而num3没有实参和其对应,那么num3的值就是undefined
fn(100200)

参数默认值

function 函数名(形参1, 形参2) {
    形参1 = 形参1 || 默认值1
    形参2 = 形参2 || 默认值2
    函数体
}

函数名(实参1)
函数名()

函数返回值

return返回的意思,其实就是给函数一个返回值和终断函数

return 语句返回函数调用处
=> return 值
=> return 

中断函数

当我开始执行函数以后,函数内部的代码就会从上到下的依次执行,必须要等到函数内的代码执行完毕,而return关键字就是可以在函数中间的位置停掉,让后面的代码不在继续执行

function fn() {
    console.1og(1)
    console.1og(2)
    console.1og(3)
    
    //写了return 以后,后面的4和5就不会继续执行了
    return
    console.1og(4)
    console.1og(5)
}

//函数调用
fn()

返回值

return 在函数体中,终止函数体代码向下执行,返回函数调用处

function fn() {
    //执行代码
    return 100
}

//此时,fn() 这个表达式执行完毕之后就有结果出现了
console.1og(fn()) // 100

我们可以在函数内部使用return关键词,把任何内容当作这个函数运行后的结果

函数类型

  1. 无参无返回值

     function 函数() {
         函数体
     }
     函数()
    
  2. 有参无返回值

     function 函数(形参1,形参2) {
         函数体
     }
     函数(实参1, 实参2)
    
  3. 无参有返回值

     function 函数() {
         函数体
         returnvar变量 = 函数()
    
  4. 有参有返回值

     function 函数(形参1, 形参2) {
         函数体
         return值
     }
     var变量 = 函数(实参1, 实参2)
    

函数定义方式

声明式函数定义:function fn() { }

函数表达式也称财值式函教定义:var fn = function() { }

预解析

  1. js代码执行解析过程

需要解析的内容有两个:

  • 声明式函数
    • 在内存中先声明有一个变量名是函数名,并且这个名字代表的内容是一个函数
  • var关键字
    • 在内存中先声明有一个变量名

QQ截图20220818150810.png

  1. 预解析,如果遇到同名变量和函数,函数优先
  2. if条件不管成不成立语句块都会解析
  3. return语句后代码不执行,但会进行预解析