函数的基本概念及语法

158 阅读1分钟

函数

语法:function 函数名称(){函数体}
命名规范:前缀应该是一个动词,多单词组合使用驼峰命名法
函数名称:可以使用字母,下划线,$,数字,但不能以数字开头
​
调用:函数声明定义之后,并不会自动执行,我们得需要手动调用
语法:函数名称() ,调用函数就是执行函数体中的所有代码
一个小细节:{ } 能不能省略的问题
   // if:如果if的代码块只有一句,可以省略{}
        // 注意:如果没有{},if结构只会影响后面一句
        // if (false) console.log(123);//不打印 console.log(456);//打印
​
        // for:如果循环体只有一句,那么可以省略{},
        // 注意,循环只会影响后面一句
        // for (let i = 0; i < 5; i++) console.log(123);//打印5次 console.log(456);//打印一次
        // 但是:函数的{}不能少,哪怕只有一句
        // function test() console.log(123);//直接报错
​
        // test()
​
        // 建议:不管几句,代码写严谨,+{}
参数设置
形参:
1.在定义方法时声明的参数,在方法的()中声明的
2.形参,形式参数,说明这里需要一个值
3.特点:
    1.调用前,它是一个参数的占位,说明调用方法需要一个传递值过来
        没有传递参数,形参值默认为undefined,相当于定义了一个变量但是却没有赋值
    2.调用时,形参是   方法的局部变量   ,只有在方法中可以使用,在方法外不能使用
        调用方法传递参数,实质就是 实参为形参赋值的过程
    
实参:
1.实参是指实质参数,也就是实质存在的值,它是一个真正的值
2.实质是调用者来准备的
​
结论:调用方法传递参数,实质就是 实参为形参赋值的过程
函数的返回值
函数功能的单一性:函数一般只做业务处理,并不会对结果进行处理
它会将  结果返回, 让调用者进行处理
1.函数的最后返回结果--return关键字可以实现函数值的返回
2.调用函数时接受结果--定义一个变量用于接受函数的返回值
​
函数的返回值的细节:
1.如果函数内部没有写 return 来返回值,也会默认返回undefined
2.默认情况下,函数只能返回一个值(变量),如果想返回多个值,一般可以使用一个结构(对象)进行包装
    如果直接返回多个值,最终只会返回最后一个值
    例如:return sum, name   只会返回name
    所以我们可以打包成一个数组, return [sum, name]
3.return 有两种常用功能:01.返回值   02.结束当前函数--这个return是结束当前函数,后面的不再执行
4.return 只能写在函数中,如果写在函数外面  直接报错:Illegal return statement--非法的return语句
作用域
 // 一:全局作用域--全局变量
        // 如果没有声明这个变量,报错:age is not defined  没有定义
        // Cannot access 'age' before initialization  不能再初始化之前访问age
        // console.log(age);
        // let age = 20
        
        
        // 如果一个变量没有声明,而是直接赋值使用,相当于定义了一个真正的全局变量
        // 它会将这个变量挂载到window全局,页面不关闭,变量不会释放,严重的会造成全局污染
        // for (i = 0; i < 5; i++) {
        //     console.log(i);
        // }
        // console.log(window);
​
 // 二:局部作用域,也叫函数作用域--局部变量
        // 在函数内部声明的变量,在函数外部不能使用(形参相当于函数的局部变量)
        // function test() {
        //     let age = 20
        // }
        // test()
        // console.log(age);  //报错:age is not defined
​
 // 三:块级作用域--块级块级
        // 块:就是指{}
        // 1.作用域:变量所在的{}结构
        // 2.有效作用域:从定义这个变量开始,到这个变量所在的 } 结束
        // if (true) {
        //     console.log(age);//报错:Cannot access 'age' before initialization
        //     let age = 20
        // }
        // console.log(age);//报错:age is not defined
变量查找原则--就近原则
变量的使用原则:就近原则:自己有就使用自己的,自己没有就查找外部作用域 如果;查到全局变量都没有,那就报错   
匿名函数
 <p>我是p元素,我的颜色是黑色</p>
    <button>单击将p元素颜色修改为红色</button>
    <script>
 // 具名函数:在声明函数的时候为函数命名
        // 这种方法定义的函数将会挂载到全局window,页面不关闭,不释放,严重的造成全局污染
        function aabb() { //这种有名字的函数就叫具名函数,函数名是aabb
            console.log(123);
        }
        // 调用函数
        aabb()
​
        // 匿名函数:在声明函数的时候没有名称,匿名函数不能单独存在,一般作为变量的值,【重点:或者作为参数】
        // function() { } -- 这种没有名字的函数就叫匿名函数,单独存在会报错
​
        // 所以我们要将匿名函数作为一个变量的值,那么这个时候变量abc就是一个函数了--函数表达式
        // 使用匿名函数,不会挂载到全局window,可以很好的解决function函数的全局污染问题
        let abc = function () {
            console.log(456);
        }
        // 调用: 函数名()
        abc()
        console.log(window);
​
        // 【重点:把匿名函数作为参数】 -- 案例
        let p = document.querySelector('p')
        let btn = document.querySelector('button')
        btn.addEventListener('click', function () { //这个函数是个匿名函数,且作为一个参数
            p.style.color = 'red'
        })
    </script>

\