js基础day4

一、函数

在这里插入图片描述

1.为什么需要函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.函数的使用

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>体验函数99乘法表</title>
    <style>
        span {
            display: inline-block;
            /* 我们会发现错位了,因为两位数和一位数撑开的宽度是不一样的,查看两位数盒子的宽度来设置死宽度,然后文字居中 */
            width: 100px;
            padding: 5px 10px;
            border: 1px solid pink;
            margin: 2px;
            border-radius: 5px;
            box-shadow: 2px 2px 2px rgba(255, 192, 203, .4);
            background-color: rgba(255, 192, 203, .1);
            text-align: center;
            color: hotpink;
        }
    </style>
</head>

<body>
    <script>
        // 声明  
        // sheet99是函数的名字
        function sheet99() {
            // 1. 外层循环控制行数
            for (let i = 1; i <= 9; i++) {
                // 2. 里层循环控制列数
                for (let j = 1; j <= i; j++) {
                    document.write(`<span>${j} x ${i} = ${i * j}</span>`)
                }
                // 换行
                document.write('<br>')
            }
        }
        // 调用
        // 要2个就复制两次 要50个可以for循环
        // sheet99()
        for (m = 0; m < 50; m++) {
            console.log(sheet99())
        }
    </script>
</body>

</html>

在这里插入图片描述

代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的使用</title>
</head>

<body>
    <script>
        // 1. 函数的声明
        function sayH1() {
            console.log('hi~~~')
        }
        // 2. 函数调用   函数如果不调用的话,自己不执行
        sayHi()
    </script>
</body>

</html>

在这里插入图片描述

代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数封装案例</title>
</head>

<body>
    <script>
        // 1. 求2个数的和
        /*  function getSum() {
             let num1 = +prompt('请输入第一个数')
             let num2 = +prompt('请输入第二个数')
             console.log(num1 + num2)
         }
         getSum() */
        // 2. 求1~100累加和
        function getSum100() {
            let sum = 0
            for (let i = 1; i <= 100; i++) {
                sum += i
            }
            console.log(sum)
        }
        getSum100()
    </script>
</body>

</html>

3.函数传参

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的参数</title>
</head>

<body>
    <script>
        // 2. 求1~100累加和
        // function getSum(end) {    //相当于写了这样一句话:end = 50
        //实验一下   console.log(end)
        // let sum = 0
        // for (let i = 1; i <= end; i++) {
        // sum += i
        // }
        // console.log(sum)
        // }
        // getSum(50)   //1~50
        // getSum(100)  //1~100

        function getSum(start, end) {
            // start和end是形参  形式上的参数
            let sum = 0
            for (let i = start; i <= end; i++) {
                sum += i
            }
            console.log(sum)
        }
        getSum(1, 50)  //调用小括号里面的实参   ---实际的参数
        getSum(100, 101)  
    </script>
</body>

</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数封装数组求和</title>
</head>

<body>
    <script>
        // 1. 封装函数
        // 为了让程序更完美 给一个参数的默认值 比如:空数组
        function getArrSum(arr = []) {
            let sum = 0
            for (let i = 0; i < arr.length; i++) {
                sum += arr[i]
            }
            console.log(sum)
        }
        getArrSum([1, 2, 3, 4, 5])
        getArrSum([11, 23, 66])
        getArrSum()
    </script>
</body>

</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数参数-默认参数</title>
</head>

<body>
    <script>
        // 函数求和
        // function getSum(num1, num2) {
        // 当没有实参传入的时候 num1默认的值是undefined 两个undefined相加是NaN
        // document.write(num1 + num2)
        // }
        // getSum(1, 2)
        // getSum()


        // 函数求和
        function getSum(x = 0, y = 0) {
            // 给x, y默认的一个值 0
            document.write(x + y)
        }
        // 优先看有没有参数传过来
        getSum(1, 2)
        getSum()
    </script>
</body>

</html>

4.函数返回值

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实参可以是变量</title>
</head>

<body>
<script>
    //   求n ~ m的累加和
    function getSum(n = 0, m = 0) {
        let sum = 0
        for (let i = n; i <= m; i++) {
           sum += i 
        }
        console.log(sum)
    }
    // getSum()
    // getSum(1, 2)
    let num1 = +prompt('请输入起始值:')
    let num2 = +prompt('请输入结束值:')
    // 调用函数
    getSum(num1, num2)   //实参可以是变量
</script>
</body>

</html>

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的返回值</title>
</head>

<body>
    <script>
        // 函数的返回值
        function fn() {
            return 20
        }
        // 相当于执行了 fn() = 20   fn()是调用者
        // return的值返回给调用者
        // console.log(fn())
        let re = fn()
        console.log(re)

        //  求和函数的写法
        function getTotalPrice(x, y) {
            return x + y
            // return后面的代码不会被执行
            // return语句不能换行写 在我们js中,换行就相当于一个语句结束 
            console.log(999)
        }
        // console.log(getTotalPrice(1, 2))   //太麻烦
        let sum = getTotalPrice(1, 2)
        console.log(sum)

        function fn() {

        }
        let re2 = fn()
        console.log(re2)      //返回值是undefined
    </script>
</body>

</html>

在这里插入图片描述

函数返回值案例:求最大值和最小值

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>求最大值函数</title>
    <style>
        /* div {
            width: 50px;
            height: 50px;
            background-color: pink;
            margin:  100px auto;
        } */
    </style>
</head>

<body>
    <div></div>
    <script>
        // 1. 求最大值函数
        /*  function getMax(x, y) {
             return x > y ? x : y
         } */
        // 函数的调用
        // getMax(1, 2)是调用者 相当于把2赋值给getMax,然后getMax就可以使用啦
        /*   let max = getMax(1, 2)
          console.log(max) */

        // 2. 求任意数组的最大值,并且返回
        function getArryValue(arr = []) {
            // (1) 先准备一个max变量存放数组的第一个值
            let max = arr[0]
            for (let i = 1; i < arr.length; i++) {
                if (max < arr[i]) {
                    max = arr[i]
                }
            }
            // (3)返回值
            return max
        }
        // 函数内部的变量跟外部没有影响 后面要学 一个是局部变量一个是全局变量
        let max = getArryValue([1, 6, 7, 9])
        console.log(max)



        /* const div = document.querySelector('div')
        div.innerHTML = max */
    </script>
</body>

</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>求最大值和最小值函数</title>
</head>

<body>
    <script>
        // 3. 求任意数组的最大值和最小值,并且返回
        function getArryValue(arr = []) {
            // (1) 先准备一个max变量存放数组的第一个值
            let max = arr[0]
            let min = arr[0]  //最小值
            // (2)遍历比较
            for (let i = 1; i < arr.length; i++) {
                // 最大值
                if (max < arr[i]) {
                    max = arr[i]
                }
                // 最小值
                if (min > arr[i]) {
                    min = arr[i]
                }
            }
            // (3)返回值
            // return min   //return有结束语句的功能
            // return max   //return只能存一个值,但是数组可以存多个值
            return [max, min]   //返回值返回的是数组
        }
        // 函数内部的变量跟外部没有影响 后面要学 一个是局部变量一个是全局变量
        let newArr = getArryValue([1, 6, 7, 9])
        // console.log(newArr)
        console.log(`数组的最大值是:${newArr[0]}`);
        console.log(`数组的最小值是:${newArr[1]}`);
    </script>
</body>

</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数细节</title>
</head>

<body>
    <script>
        // 函数不调用不执行  在函数调用的时候传递的参数叫做实参
        function getSum(x, y) {
            // 返回值返回给了谁?函数的调用者getSum(1, 2)
            return x + y
        }
        // getSum(1, 2)   //这个时候已经调用了,有结果了 但是我们要得是这个值,而不是这个调用
        // let result = getSum(1, 2)=3 把返回值给调用者,调用者再赋值给result
        let result = getSum(1, 2)
        console.log(result);
    </script>
</body>

</html>

5.作用域

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作用域</title>
</head>

<body>
    <script>
        let num = 10    //1. 全局变量
        console.log(num);
        function fn() {
            console.log(num);
        }
        fn()

        // 2.  局部变量
        function fun() {
            let str = 'pink'
        }
        // 只能在函数内部使用
        console.log(str);
    </script>
</body>

</html>

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
结果:123
在这里插入图片描述
结果: 4 ‘22’
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>变量的特殊情况</title>
</head>

<body>
    <script>
        /*        let num = 20
               function fn() {
                   // 函数内部变量没有声明 直接赋值 也当全局变量来看 强烈不推荐 因为函数外部如果声明了一样的变量 后面的会覆盖前面的
                   num = 10
                   // 声明之后才会相互不影响
                   // let num = 10 
               }
               fn()
               console.log(num);
       
               function fun(x, y) {
                   // 形参可以看做函数的局部变量
                   console.log(x);
               }
               fun(9, 0)
               console.log(x);   //错误的 */


        let num = 10
        function fn() {
            let num = 20
            function fun() {
                let num = 30
                console.log(num);
            }
            fun()
        }
        fn()
    </script>
</body>

</html>

6.匿名函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.匿名函数之函数表达式

在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>匿名函数之函数表达式</title>
</head>

<body>
    <script>
        /* // 1. 函数表达式
        let fn = function () {
            console.log('我是函数表达式');
        }
        // console.log(fn);
        // 函数的调用
        fn() */
        // fn(1, 2)    //错误
        // 因为加了let  所以必须先声明后使用
        let fn = function (x, y) {
            console.log(x + y);
        }
        fn(1, 2)

        // 函数表达式和具名函数的区别  
        // 1. 具名函数的调用可以写到任何位置
        // 函数在哪儿调用都行 在函数声明之前调用都行
        // 2. 函数表达式必须先声明函数表达式,后调用
        fun()
        function fun() {
            console.log(1);
        }
    </script>
</body>

</html>
2.匿名函数之立即执行函数

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>立即执行函数</title>
</head>

<body>
    <script>
        /*  (function () {
             console.log(22);
         })() */
        // (function(){})()  立即函数也是有函数的调用的 这个小括号就相当于是
        // 立即执行函数一定要加分号 不然会报错
        /*  (function () {
             let num = 10
         })(); */
        // 也可以把分号写在函数前面
        /*  ; (function () {
             let num = 10
         })() */
        /*   (function () {
              let num = 20
          })(); */
        // 1. 第一种写法
        (function (x, y) {
            console.log(x + y);
        })(1, 3);  //这里面是实参
        // 第二种写法
        // (function(){})();
        (function (x, y) {
            console.log(x + y);
        }(2, 3));


        //   立即执行函数也可以有一个函数名
        (function getSum() { }())
        // 如果是直接声明一个函数 会多一个函数调用的步骤
        function getSum() { blublueblue }
        getSum()   
    </script>
</body>

</html>

二、综合案例

在这里插入图片描述在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>综合案例</title>
</head>

<body>
    <script>
        // 1. 用户输入
        let second = +prompt('请输入秒数:')
        // 2. 封装函数
        function getTime(t) {
            // console.log(t);  //总的秒数   形参和实参最好区分开来
            // 3. 转换
            // 小时:h = parseInt(总秒数 / 60 / 60 % 24)
            // 分钟:m = parseInt(总秒数 / 60 % 60)
            // 秒数:s = parseInt(总秒数 % 60)
            h = parseInt(t / 60 / 60 % 24)
            m = parseInt(t / 60 % 60)
            s = parseInt(t % 60)
            // 这一系列操作之后 还要把值赋值给h
            // 函数不声明直接使用 会被当做全局变量来使用 会有风险 所以要加上let
            let h = h < 10 ? '0' + h : h
            let m = m < 10 ? '0' + m : m
            let s = s < 10 ? '0' + s : s
            // console.log(h, m, s);     //后面会知道用return的好处
            return `转换完毕之后是${h}小时${m}${s}`
        }
        // getTime(second)  return的值给了函数的调用者  将return的结果给一个变量更方便
        let str = getTime(second)
        document.write(str)
        // document.write(h)
    </script>
</body>

</html>

三、逻辑中断

在这里插入图片描述在这里插入图片描述在这里插入图片描述
pc端
在这里插入图片描述
移动端
在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>逻辑中断</title>
</head>

<body>
   <script>
       function fn(x, y) {
           // 另一种方法
           x = x || 0
           y = y || 0
           console.log(x + y);
       }
       fn(1, 3)
       // 要传参数才有值,不然x,y是undefined,undefined+undefined结果是NaN,为解决这个bug我们之前的做法是给形参一个默认值0
       // undefined在逻辑运算里面当假看  所以逻辑或x || 0结果是0
       fn()

       // 逻辑与一假则假
       // 逻辑与只要有一个假就中断操作
       console.log(false && 22);
       console.log(false && 3 + 9);
       let age = 18
       // age++自增
       console.log(false && age++);   //age++就不执行了 因为逻辑与一假则假
       console.log(age);

       // 逻辑或一真则真
       // 逻辑或只要有一个真就中断操作
       console.log(22 || age++);
       console.log(age);

       console.log(11 && 22);   //都是真值,则返回最后一个真值
       console.log(11 || 22);   //都是真值,则返回第一个真值
   </script>
</body>

</html>

四、转换为布尔型

字符串只有空字符串为假,其余为真;数字只有0为假,其余为真
在这里插入图片描述在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>转换为布尔型</title>
</head>

<body>
    <script>
        console.log(Boolean('pig'));
        console.log(Boolean(''));
        console.log(Boolean(0));
        console.log(Boolean(90));
        console.log(Boolean(-90));
        console.log(Boolean(undefined));
        console.log(Boolean(null));
        console.log(Boolean(NaN));

        if (true) {
            console.log(33);
        }
        // 声明变量不给值是undefined undefined转换为布尔型为false 所以不打印输出
        let age
        if (age) {
            console.log(66);
        }
    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值