学Javascript的第四天!!!

128 阅读4分钟

JavaScript第四天:

函数:

作用:将代码封装起来,方便使用

声明定义: function函数名称(形式参数列表){函数体}

函数命名规范:

  • 和变量命名基本一致

  • 尽量小驼峰式命名法

  • 前缀应该为 动词

  • 命名建议:常用动词约定

    <script>
        function 函数名() {
            函数体
        }
        function sayHi() {
            document.write('hi')
        }
    </script>

函数的调用语法 :

注意:声明(定义)的函数必须调用才会真正被执行,使用 () 调用函数

  • 函数体:

    函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才会被执行。函数的功能代码都要写在函数体当中。

    <script>
        // 函数调用,这些函数体内的代码逻辑会被执行
        function 函数名() {
            函数体
        }
        function sayHi() {
            // 函数体
            document.write('hi')
        }
        // 函数一次可以调用多次,每一次函数调用函数里面的代码会被重新执行一次
        sayHi()
        sayHi()
    </script>
</body>

函数传参:

函数传参可以极大提高函数的灵活性

调用函数时,需要传入几个数据就写几个,用逗号隔开

    <script>
        function 函数名(形参) { //参数列表
            函数体
        }
        函数名(实参)


        function sayHi(numb1, numb2) {
            let sum = document.write(numb1 + numb2)
        }
        sayHi(10, 20) 
    </script>

形参:

  1. 定义函数的时候,写()写的就是形参 :
    • 声明定义的时候,形参只是参数占位
    • 在调用方法的时候,形参是个变量
    • 相当于在方法中声明的局部变量**(只有在方法内部使用)(方法外部使用会报错)**
  2. 可以定义多个形参

实参:

  1. 调用函数的时候,写在()里面的就是实参
  2. 实参就是实际参数,是真正存在的值
  3. 调用的时候,尽量让形参和实参 :
    • 顺序对应
    • 数量对应
    • 类型对应

方法的调用 :

  1. 函数名称(实际参数列表)
  2. 调用函数的过程就是实参为形参赋值的过程

案例:求数组和

    <script>
        // 形参可任意取名字为arr,声明的局部变量
        function getSum(arr) {
            //首先声明一个变量为0
            let sum = 0
            for (let index = 0; index < arr.length; index++) {
                sum += arr[index]
            }
            console.log(sum) //和
        }
        let array = [88, 97, 78, 59, 80, 79, 66, 58, 40, 100]
        // 实参为真实存在的的值,是声明的数组array
        getSum(array)

函数返回值:

当函数需要返回数据出去时,用return关键字

语法:

    <script>
        function name() {
            return 10 //数据
        }
        // 声明一个变量来使用return返回来的值
        let num = console.log(name());
    </script>

细节:

  • 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用

  • 函数内部只能运行到 1 次 return,并且 return 后面代码不会再被执行,所以 return 后面的数据不要换行写

  • return会立即结束当前函数

  • 函数可以没有 return,这种情况函数默认返回值为 undefined

作用域:

作用域概述:通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

全局作用域:全局有效

作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件

函数外部let 的变量

全局变量在变量定义之后区域可以访问和修改

局部作用域:局部有效

作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。

函数内部let的变量

局部变量只能在当前函数内部访问和修改

块级作用域:{}内有效

块作用域由 { } 包括,if语句和for语句里面的{ }等

{} 内部的let变量

let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问

变量作用域特殊情况:

  • 如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
  • 函数内部的形参可以看做是局部变量,所以形参相当于函数内部定义的局部变量,只有在函数内部可以使用

作用链域:

  • 函数内部还可以创建函数,函数内部可以使用函数外部的成员
  • 当函数内部需要需要一个变量时,自己就使用自己的,如果没有就查找外部作用域,如果还没有,就继续往外部找,直到全局作用域,如果全局都没有,就报错

匿名函数:

介绍: 没有名称的函数

具名函数:

声明:function fn (){}

调用 fn()

匿名函数:

function (){}

目前没有, 先认识

立即执行函数:

声明:(function (){})()

不需要调用,立即执行

场景介绍: 避免全局变量之间的污染

注意: 多个立即执行函数要用 ; 隔开,要不然会报错