javascript函数

127 阅读2分钟

函数

作用:让代码可以方便重复使用;函数不用主动运行,需要调用

函数的语法


             function 函数名(形参) {
                    return 返回值
             }
			console.log(函数名(实参))

函数的调用: 函数名()

函数传参:

传参的作用:把函数在复用过程中会改变的值提取出来, 作为参数传递进去.这样可以极大提高函数的灵活性

形参:本质上就是在函数内部声明变量

实参:给形参赋值

例如:

 function getSum(arr) {
            let sum = 0
            for (let i = 0; i < arr.length; i++) {
                sum += arr[i]
            }
            return sum
        }
        document.write(getSum([1, 2, 3, 4, 5]))

//arr是形参,[1, 2, 3, 4, 5]是实参
//只需要改变实参就可以实现多个数组进行累加和的操作

注意点:实参的个数和形参的个数可以不一致,如果形参过多 会自动填上undefined , 如果实参过多 那么多余的实参会被忽略

伪数组(arguments)

如果函数不写形参,而写了多个实参的话,那么这些实参就会被传递到函数的伪数组(arguments).

arguments的特点:1、无法使用数组的一些方法;2、可以使用数组索引和数组长度的属性。

函数的返回值(return)

返回函数最后运行的值,这样在调用的时候就比较灵活。

注意点:

​ 1、函数一旦碰到return就不会在往下执行了 函数的结束用return

​ 2、return只能返回一个值,要是想要返回多个值,可以返回数组

函数的作用域

作用域分类:全局作用域;局部作用域;块级作用域

变量分类:全局变量;局部变量;块级变量

注意:局部变量必须是函数里面声明过的变量,变量不声明直接赋值就会变成全局变量

作用域链:变量访问的原则是就近原则;先局部,局部没有再找全局

例如

 let num = 10
        function fn() {
            let num = 20
            console.log(num)      //20
        }
        fn()
        console.log(num);     //10

let a = 1
        let b = 10
        function fn1() {
            let a = 2
            let b = '22'
            fn2()
            function fn2() {
                let a = 3
                fn3()
                function fn3() {
                    let a = 4
                    console.log(a) //a的值:4 
                    console.log(b) //b的值:'22'
                }
            }
        }
        fn1()

立即执行函数

语法: ()();

注意:括号后面一定要加上分号

// 立即执行的函数可以避免变量重复命名出现的问题
        (function() {
            let res = 1
            console.log(res);
        })();

        (function() {
            let res = 2
            console.log(res);
        })();