函数的概念

## 1.函数的定义
     函数可以理解为一个盒子  把一段多次使用的复杂代码放在里面
     先定义 在调用 必须定义 没有定义的话 后面就不能调用 没有掉用的话 前面定义就毫无意义

## 2.函数的语法
    语法 : function () {
    }
### 2.1 定义
    a.赋值式定义  var a(变量名字) = function (形参) {要多次使用的代码}
    b.声明式定义  function 函数名 (形参) {要多次使用的代码}
### 2.2 调用
    语法 : 函数名(实参)
### 2.3 两者的区别
    赋值式定义 不可以把调用放在定义前面 可以放在后面 
    声明式定义 可以把声明放在定义前面和后面 
    *具体是为什么呢?请看下面分析*
### 2.4 变量提升和声明提升(区别的原因)
    在浏览器读js代码时 会先预解析 在变量提升
    什么又是变量提升呢?
    在预解析的时候,js的内部变量会全部提升到当前作用域顶部 换句话就是当前代码的最上面
    要注意的是变量提升上去以后 内容便没有跟着上去. 这就导致赋值变量前面的调用不能使用
    因为这个时候 变量里面没有赋值 还没有定义 它输出的值是undefined .undefined不能调用
    所以会报错 
    还是不太清楚的可以看例子:
    我写的代码:
    fn()  调用
    var fn = function fn () {
    console.log(1)  假如我随便打一个1
    }
    fn()  调用
    浏览器解析的
    fn ()  不是变量不提升
    var fn = function () {
        console.log(1)  是变量所以要上去(变量的提升) 注意:内容不会跟着上去
        }
        fn ()  不是变量不提升
    提升以后
    var fn  未定义 如果要输出会输出undefined
    fn () 上面没有定义 所以输出 undefined
    fn = function () {
    console.log(1)  把函数赋给fn
    }
    fn () 因为上面已经定义 所以打印1
    所以在赋值式定义的时候 调用不能写在定义前面
    那为什么声明式函数又可以放在前面呢? (声明提升)
    我也分三部分来解释
    我写的代码
    fn1    调用
    function fn1 () {   定义函数 
    console.log(2)
    }
    fn1   调用
    浏览器解析的
    fn1 ()  不是声明不提升
    function fn1 () {  是声明提升 这里注意是定义的整个函数一起上去
    console.log(2)
    }
    fn1 ()  不是声明不提升
    提升以后
    function fn1 () {  定义函数
    console.log(2)
    }
    fn1()    上面已经定义所以可以调用
    fn1()    上面已经定义所以可以调用
### 2.5 参数
    前面我提到了参数,但是没有解释 这里我来解释一下
    为什么我们要有参数呢?
    因为如果没有参数,函数的功能比较单一 不够灵活
    参数有:形参(写在定义里面,每个形参相当于一个参数 形参的值是由实参传递过来的)和实参(写在调用里面 按照书写顺序一一对应 传递给形参)
    大家可以想一想 如果形参多,实参少 会出现什么情况呢?
    function fn2 (a , b , c , d) {
    console.log(a , b , c , d)
    }
    fn2 (100 , 40)  实参里面的数字会传递给形参 但是这里只有两个 所以a=100 b=40 c和d没有值 相当于我只是申请了变量但是没有赋值 就是未定义 所以这个时候会打印出undefined undefined 
    如果实参多,形参少,又会出现什么情况呢?
    function fn3 (a) {
    console.log(a)
    }
    fn3 (11 , 23 , 44)  由于我实参只有一个所以我只会把11传递给a 23 44 没有传递的对象所以不传递
### 2.6 函数参数默认值
       function fn4 (a , b = 29 , c = 33) { 把数字直接赋值给形参 这就是它的默认值
       console.log(a , b , c)         特点:如果实参没有给值 就是形参的默认值打印出来
       如果实参给了 就执行实参的 (实参覆盖了形参的值)
       }
       fn4(10 , 58)  
       解析一下我的代码: b的默认值是29 c是33
       由于我实参给了10 和58 首先a = 10 b = 58(覆盖了) c
       = 33 
### 2.7 函数的返回值
       每个函数都有一个返回值 默认返回值是undfined 如果定义了就是定义那个
       语法 :return 要返回的内容  必须要有空格 
       特点: 返回就会终止
       要接收返回值就要申请一个变量 我们的返回值是返回给形参的
       function fn1 () {
       console.log(1) 打印1
       console.log(2) 打印2
       return 6       返回6 停止执行
       console.log(3)
       }
     var a = fn1() 接收返回值
     console.log(a)  打印6
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值