js中的函数

这篇博客详细介绍了JavaScript中的函数使用,包括如何声明和调用函数,参数的使用,函数的默认参数,以及函数的返回值。还探讨了函数的作用域,包括全局作用域、局部作用域和块级作用域,并举例说明了变量的特殊情况。此外,讲解了函数表达式和立即执行函数的概念及其应用场景,强调了它们在解决全局变量污染和避免命名冲突方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.函数的使用

 <script>
        //    1.声明函数
        // function 函数名() {
        //     // 函数体:真正去执行的代码
        // }

        // 1.声明函数
        function Hello() {
            console.log('hello');
        }
        // 2.调用函数  函数名()
        Hello()
        Hello()

        // 注意:默认是不执行,必须要调用才能执行
    </script>

2.函数案例练习

 <script>
        // 1.定义求和的函数
        function getSum() {
            let a = 10
            let b = 20
            console.log(a + b);
        }
        // 2.调用这个函数
        getSum()


        //  1.定义一个1-100之间求和函数
        function getSum100() {
            let sum = 0
            for (let i = 1; i <= 100; i++) {
                //    累加
                sum += i
            }
            console.log(sum);
        }
        // 2.调用函数
        getSum100()
    </script>

3.函数的参数

<script>
        // 1.定义求和的函数
        // 定义函数时参数叫形参,形式上的参数可以理解为我定义一个变量
        function getSum(x, y, z) {
            console.log(x, y, z);//5,8,undefined
            console.log(x + y);
        }
        // 2.调用这个函数
        // 实参:在调用函数时传递的参数,可以理解为在为上面形参赋值
        // getSum(1, 5) //6
        getSum(5, 8)//13

        // 参数的作用: 根据用户传递的实参,灵活的返回对应的结果

        // 注意点:实参和形参最好多应,不然多于的形参参数返回undefined
    </script>

4.函数的默认参数

 <script>
        // 函数的默认参数:一开始就给形参赋值,给他一个默认值防止程序出错
        // 原因:不给默认,形参默认是undefined

        let num1 = +prompt('请输入第一个值')
        let num2 = +prompt('请输入第2个值')
        function getSum(x = 0, y = 0) {
            // console.log(x, y);//0  0
            // 第一个值小于于第二个值
            console.log(x + y);// 0
        }
        // getSum(5, 4) // NaN
        getSum(num1, num2)

        // // 变量的重新赋值
        // let x = 0
        // x = 5
        // let y = 0
        // y = 4


    </script>

5.函数封装数组求和

<script>
        // 函数的默认参数:一开始就给形参赋值,给他一个默认值防止程序出错
        // 原因:不给默认,形参默认是undefined
        let a1 = [100, 50, 80, 90, 60, 40]
        let a2 = [120, 5, 80, 90, 60, 160]
        // 1.数组求和的功能,这个数组不固定,封装一个函数,把数组当参数传递
        // 设置默参数,防止用户没有传递参数,程序报错
        function getArrsum(Arr = []) {
            console.log(Arr);//默认不传值是undeined
            // 函数体:数组求和
            let sum = 0
            for (let i = 0; i < Arr.length; i++) {
                // console.log(i);//索引
                // console.log(Arr[i]);//数组里面的每一项数据
                sum += Arr[i]
            }
            console.log(sum);
        }
        // 2.调用函数的时候传递数组
        getArrsum()
        // 传递实参可以是一个变量
        getArrsum(a1)
        getArrsum(a2)

        // let Arr = []
        // let a1 = [100, 50, 80, 90, 60, 40]
        // Arr = a1 = [100, 50, 80, 90, 60, 40]
    </script>

6.函数的返回值

<script>
        // 函数的返回值:就是函数执行完毕,会返回一个结果,结果需要在外部输出,通过函数返回值返回出来

        function fn() {
            // return返回 值(结果)
            return 20
        }

        // 调用者
        console.log(fn());
        //fn() = 20

        // 返回值,最后到了调用者哪里


        // 1.定义一个求和函数
        function getSum(x = 0, y = 0) {
            //  结果返回出来
            return x + y
            // return结束函数,返回一个结果,后面的代码不在继续执行
            // alert(111)
        }

        // 2.调用函数
        // console.log(getSum(50, 80));// getSum(50, 80) =130

        let money = getSum(50, 80) // money=getSum(50, 80)=130
        let money2 = getSum(30, 40) //getSum(30, 40) =70
        // 3.拿到结果之后不同标签进行渲染
        document.write(`<a href='#'>${money}</a>`)
        document.write(`<button>${money2}</button>`)
    </script>

7.函数的细节

 <script>
        function fn(x, y) {
            // 函数没有retrun关键字返回的结果是undefined
            x + y
        }

        console.log(fn(2, 2));
    </script>

8.函数的作用域

 <script>
        // 作用域:代码的可应用范围,变量生效范围
        // 分3种:   1.全局作用域(全局变量)  生效范围(整个js文件整个script标签内)
        //          2.局部作用域(局部变量,函数作用域)  生效范围(函数内部)
        //          3.块级作用域 (块级变量)只能在循环或者判断语句使用let定义的变量,只能在花括号中生效

        //  1.全局作用域(全局变量)  生效范围(整个js文件整个script标签内)
        // let a = 10
        // function fn() {
        //     console.log(a);//10
        // }
        // fn()


        // if (true) {
        //     console.log(a);//10
        // }


        //2.局部作用域(局部变量,函数作用域)  生效范围(函数内部)
        function fn() {
            let a = 20
            console.log(a);//20
        }
        fn()
        console.log(a);//报错


        // 3.es6推块级作用域 (块级变量)只能在循环或者判断语句使用let或const定义的变量,只能在花括号中生效
        for (let i = 10; i <= 100; i++) {
            console.log(i);//10....100
        }
        // console.log(i);//报错

        if (true) {
            let a = 100

        }
        console.log(a);//报错
    </script>

9.变量的特殊情况

<script>
        // 1.函数内部变量没有声明,会默认当成全局变量使用
        function fn(x, y) {
            // 2.函数内部形参默认是局部变量
            console.log(x, y);//10 20
            a = 20
            b = 100
            let c = 200
            console.log(a, b, c);//20 100 200
        }
        fn(10, 20)
        console.log(x, y);//报错 x,y没有定义
        // console.log(a, b, c);//20 100 报错
    </script>

10.作用域链 就近原则

11.函数表达式

<script>


        // 具名函数
        function fn(x, y) {
            console.log(x, y);
            return 111
        }
        // 调用具名函数 函数名()
        console.log(fn(1, 5));

        // 匿名函数
        // 函数表达式:通过变量名调用匿名函数方式称之为函数表达式

        let handle = function (x, y) {
            console.log(x, y);
            return 222
        }
        console.log(handle(2, 6));

        //注意: 使用函数表达式,调用要放在函数下边,变量先定义在使用
    </script>

12.立即执行函数

<script>
        //    立即执行函数(非匿名函数)
        // 作用:解决全局变量污染问题,解决全局变量名重复的问题

        let a = 100;
        // 写法1 (())()
        (function fn(x, y) {
            console.log(x, y);
            let a = 10
            console.log(a)
        })(10, 100);


        // 写法2 (()())
        (function () {
            let a = 20
            console.log('这是自调用函数')
        }());

        // 注意点:自调用函数之间要使用分割符进行隔开,不然就报错
    </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值