javaScript函数

  • 什么是函数?
    • 在 JS 中,函数可以理解为将一段在程序中多次出现的代码封装起来的盒子,以便在多个地方调用执行
    • 换句话说:函数就是一个内部封装了部分代码的盒子,可以在多个位置被调用
  • 函数的使用
    • 创建函数(定义函数)
    • 调用函数

函数的定义

  • 声明式定义
function fn() {
    
}
/**
 * 分析:
 *      function:声明函数的关键字,代表接下来这段代码是一个函数
 *      fn:函数名,调用函数时需要使用,函数名自定义,符合命名规范和见名知意即可(!** 匿名函数时可以不写)
 *      ():小括号内存放函数的参数(后续讲解)
 *      {}:存放函数代码,调用函数时,想执行的代码都写在内部
*/
复制代码
  • 赋值式定义
var fn = function () {

}
复制代码

函数的调用

function fn1() {
    
}
var fn2 = function () {

}

fn1()
fn2()
复制代码

声明式与赋值式的区别

  • 书写区别
  • 调用区别(赋值式只可以在定义后调用,声明式定义前后都可以)
// 声明式
fn1()  // 可以执行
function fn1(){
    // 函数代码。。。。。。
}
fn1()  // 可以执行


fn2()   // 不可以执行(!**  声明时编程,其实就是相当于将一个函数赋值给一个变量,会有变量的声明提升,所以在变量声明前调用时,根据变量声明提升的规则,此时变量为 undefined ,所以不能被调用)
var fn2 = function () {
    // 函数代码。。。。。。。。。
}
fn2()   // 可以执行
复制代码

函数的参数

  • 函数的参数有形参和实参(他们是从左到右的顺序一一对应的)
    • 形参:在函数声明时 function 后边的()内书写,每写一个参数,就相当于在函数内部创建一个变量,其值为函数调用时传递的值,只能在函数内部使用,不能在外部使用
    • 实参:顾名思义,实际的参数,也就是函数在调用时传递的参数
function num () {
    console.log(1 + 1)
}
num()   // 打印值为 1+1

function num (a, b) {   // 此处 a b 为形参
    console.log(a + b)
}
num(1, 1)   // 此处为 实参,分别传递给 a  和  b
num(1, 2)   // 此处打印值为 1 + 2
复制代码
  • 传参的多与少
// 少传参数
function num1(a, b, c, d) {
    console.log(a,b,c,d)
}
num1(1, 2, 3, 4)    // 打印1,2,3,4
num1(1, 2, 4) // 打印1,2,4,undefined 一一对应的少传实参会打印underfined

// 多传参数
function num2 (a) {
    console.log(a)
}
num2(1, 2)  // 打印 1 一一对应多出来的实参不接收,不执行
复制代码

函数的返回值

  • 返回值是什么?有什么作用
    • 函数内部默认有一个 return 他的值就是函数的返回值,如果函数内部不写 return 那么函数默认在函数体内部最底部返回一个 undefined
    • 如果不想返回 undefined 需要手动在函数内部写上 return 并且跟上需要返回的值
    • 可以中断函数(返回1 2 3return后面的代码会终止)
    function fun() {
              console.log(1)
              console.log(2)
              console.log(3)
              return '下面就没了'
              console.log(4)
              console.log(5)
          }
    fun()
    复制代码

函数的预解析

  • 什么是预解析
    • 在代码运行前,先全部分析一遍代码,这个行为叫做预解析(预解释)
  • 预解析的内容
    • 声明式函数定义
    • var 声明变量
//预解析就是将函数提升 
        fn()
        function fn() {
            console.log('我是函数我被调用了')
        }
       
       提升后变成 
        function fn(){
        console.log('我是函数我被调用了')
        }
        fn()

 作用域(就是变量可以起作用的范围)

  •          作用域分为两个

          1.全局作用域(直接在script 标签内部书写的代码)
            在此作用域创建的变量,我们叫做全局变量,在当前 script 标签内的哪里都能使用
          2.在 JS中,全局作用域中有一个  提前给我们准备好的 对象(一种数据格式,)这个对象叫做window
            我们创建的全局变量,只能在当前作用域中使用,超出这个作用域(也就是在函数外边)去使用, 就会找不到变量
         
 作用域链

  •          作用域链就是在访问一个变量的时候, 如果当前作用域内没有
  •           会去自己的父级作用域, 也就是上一层作用域内查找, 如果找到就直接使用, 如果没有找到继续向上层查找
  •           直到查找到 最顶层的全局作用域, 如果找到了直接使用, 如果没找到 报错提示变量不存在(未定义)
  •           我们将这个一层一层向上查找的规律, 叫做作用域链

递归函数(还是一个函数,在函数内部调用和使用自身)
    和循环差不多
 

 function fn(n) {
        return n * fn(n - 1)
        }
        fn(4)//4的阶乘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值