深入探讨javascript的流程控制与分支结构,以及js的函数

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

所属的专栏:前端泛海
景天的主页:景天科技苑

文章目录

  • 1.流程控制与分支结构
    • 1.if分支结构
    • 2.switch case 分支结构
    • 3.循环结构
  • 2.函数
    • 1.函数定义方式一 :普通函数
    • 2.函数定义方式二:匿名函数
    • 3.变量提升
    • 4.函数定义方式三:不推荐 (了解) 把代码写在Function()里面
    • 5.函数定义方式四:闭包函数
    • 6.函数定义方式五:箭头函数
    • 7.函数参数 (普通位置参数,默认参数)
    • 8.arguments 自动收集所有的实参,是个数组
  • 3.函数调用

1.流程控制与分支结构

在javascript中的一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。

很多时候我们要通过控制代码的执行顺序来实现我们要完成功能。

简单理解︰流程控制就是来控制我们的代码按照什么结构顺序来执行

流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构,这三种结构代表三种代码执行的顺序。

1.if分支结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>流程控制 -> 分支结构 </title>
</head>
<body>
    <script>
        var mashengni = "美女";
        //1.单项分支
        // if(mashengni == "美女"){
        //     alert("给他买好吃的~");
        // }

        //2.双项分支
        // if(mashengni == "野兽"){
        //     alert("给他一榔头~");
        // }else{
        //     alert("跳起来给他一榔头~");
        // }

        //3.多项分支
        // 不推荐判断条件连续比较,有可能失效;
       多条件用&& 连接才行,不能用 10000 <salary<15000

        var salary = 1000;
        if(10000 < salary && salary < 12000){
            console.log("正常薪资范围~");
        }else if(12000 <= salary && salary < 15000){
            console.log("超过一般水平~");
        }else if(15000 <= salary && salary <18000){
            console.log("大神级毕业生~");
        }else if(salary >= 18000){
            console.log("王牌毕业生~");
        }else{
            console.log("回炉重生~")
        }

        //4.巢状分支,分支嵌套
        var youqian = true;
        var youfang = true;
        if(youqian){
            if(youfang){
                console.log("老子要嫁给你~!");
            }
        }

    </script>
    
</body>
</html>

2.switch case 分支结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分支结构 : switch case </title>
</head>
<body>
    <script>

js日期
在这里插入图片描述

日期的获取方法 Date/date
在这里插入图片描述

获取当前小时
在这里插入图片描述
在这里插入图片描述

   var date = new Date();
    console.log(date);
    // 获取星期 getDay
    var week = date.getDay();
    console.log(week)
    week = "1"

    // 注意点: switch case中的判断(全等于): (1) 值的比较(2)类型的比较 全部符合才能满足条件;
  switch语法 :

    switch (week){
        
        case 1:
            console.log('星期一');
            break;   //一定要加break  打断后续的case, 能防止case穿透  不然寻找到正确的条件之后,后面的case不做判断,直接执行
        
        case 2:
            console.log('星期二');
            break;

        case 3:
            console.log('星期三');
            break;

        case 4:
            console.log('星期四');
            break;
        case 5:
            console.log('星期五');
            break;

        case 6:
            console.log('星期六');
            break;

        default:    //所有条件都不满足,走default分支
            console.log("星期日!");
            break;
    }

week为字符串’1’,case里面是数值1,所以匹配不到,打印出默认值 星期日
在这里插入图片描述

将week改为1,则匹配成功
在这里插入图片描述
在这里插入图片描述

    </script>
    
</body>
</html>
// 给你月份判断该月份是第几季度,利用case穿透,使代码更简洁
// var month = 2
// switch (month){
//     case 1:
//     case 2:
//     case 3:
//         console.log("第一季度");
//         break
//     case 4:
//     case 5:
//     case 6:
//         console.log("第二季度");
//         break
//     //...
// }

3.循环结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分支结构 : 循环结构 </title>
</head>
<body>
    <script>

      
  // ### 1.for循环
        /*
            语法特征:
                1号    2号     3号
                for(初始值;判断条件;自增自减的值){
                    code1
                    code2..
                }
                先执行1,2满足后执行代码体
                然后执行3,2满足后在执行代码体
                以此类推...
                直到不满足条件终止循环;
        */
        // 打印 1~100
        for(var i = 1;i<=100;i++){
            console.log(i);
        }

在这里插入图片描述

// 打印1~100 遇到50,自动跳过;
for(var i = 1;i<=100;i++){
    if(i == 50){
        continue;
    }
    console.log(i);
}

50被跳过
在这里插入图片描述

 // ### 2.while 循环
        //遇到5,终止循环
        i = 0
        while(i<10){
            if( i == 5){
                break;
            }
            console.log(i);
            i++;            
        }     

在这里插入图片描述

        console.log("<===============第一组===================>")
        // ### 3.for( var i in Iterable )  获取的是数组中的索引号;
        var arr = ["孟浩然","赵子龙","康乃馨","张飞","汪精卫"];
        
可以根据索引拿数组中的值      
  for(var i in arr ){
            console.log(i);
            console.log(arr[i]);
        }

在这里插入图片描述

console.log("<===============第二组===================>")
// 获取的是js对象中的键
var dic = {"a":"王同培","b":"马村你","c":"张宇"};
for(var i in dic){
    console.log(i)       
    console.log(dic[i]) ;    
}

在这里插入图片描述

        console.log("<===============第三组===================>")
       
 // ### 4.for( var i of Iterable ) 获取的是数组中的值; [等价于python中 for i in Iterable:]
        for(var i of arr){
            console.log(i);
        }

在这里插入图片描述

        console.log("<===============第四组===================>")
      
  // 注意点: for(var i of dic) 不能遍历js对象[字典] error
        /*
        var dic = {"a":"王同培","b":"马村你","c":"张宇"};
        for(var i of dic){
            console.log(i)     
        }
        */

在这里插入图片描述

// 字符串的遍历:
        for(var i of "abcdefg"){
            console.log(i)
        }

在这里插入图片描述

    </script>
</body>
</html>

2.函数

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。JavaScript函数语法,函数就是包裹在花括号中的代码块,前面使用了关键词 function: 当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。
将脚本编写为函数,就可以避免页面载入时执行该脚本。 函数包含着一些代码,这些代码只能被事件激活,或者在函数被调用时才会执行 [1]。
你可以在页面中的任何位置调用脚本(如果函数嵌入一个外部的 .js 文件,那么甚至可以从其他的页面中调用)。函数在页面起始位置定义,即 <head> 部分。

1.函数定义方式一 :普通函数

(存在预加载机制,提前把函数加载到内存中,然后代码整体再执行)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>
<body>
    <script>
        
func1()
 
 // ###1 函数
 
   // 方式一 普通函数 (存在预加载机制,提前把函数加载到内存中,然后代码整体再执行)
        func1()
        function func1(){
            console.log(111);
        }

存在预加载机制,可以先调用,再定义
在这里插入图片描述

函数命名的特殊字符:

$和_
function _(){
  console.log("我是一个$函数");
      }

 _();  // $, _普通字符 -> 1是为了简单, 2是为了绕你


        // // fn();// 让变量fn所指向的那个东西. 运行起来
        //
        // gn = fn; // 实际上是内存地址的复制
        // fn();
        // gn(); //  123 对
        // // 函数的运行不是依赖于函数名. 而是依赖于内存地址

2.函数定义方式二:匿名函数

(匿名函数没有预加载价值,必须先定义再调用) 匿名函数想要运行 让该内存地址 加括号就可以了

// func2() error
var func2 = function(){
    console.log('我是func2~');
}
func2();

匿名函数先调用报错
在这里插入图片描述
在这里插入图片描述

先定义,后调用正常执行
在这里插入图片描述

在这里插入图片描述

    var x = (function(a){  // 形参->变量
          console.log("我爱你"+a);
          return "堕落小羊"
        })(123456); // 自运行函数

        console.log(x);

window是顶级作用域,内部的东西想要调用的话. 可以省略window

        // // 关于对象的补充
        // var wf = {
        //     name: "子怡",
        //     age: 199,
        //     songs: ["吹天理", "夏天不里", "秋天奖励", "冬天美丽"],
        //     chi: function(){
        //         // this就是当前对象
        //         console.log(this.name + "喜欢吃饭"); // this关键字
        //         this.he("北冰洋");
        //     },
        //     he: function(yinliao){
        //         console.log(this["name"] + "在喝"+ yinliao);
        //     }  // 7
        // }
        //
        // wf.chi(); // 777   999

      

  // // 在前端js中不存在多个返回值
        // function fn(){
        //     // 前端 多个逗号隔开. 最终返回的是最后一项.
        //     //
        //     var i = 0
        //     i++;
        //     ++i;
        //     i++;
        //     return i;
        //     return n=a(),
        //         n++,
        //         t=b(n),
        //         t;
        // }
        //
        // var r = fn();
        // console.log(r);

如果要返回多个值,需要用数组包裹
在这里插入图片描述

也可以封装到json中返回
在这里插入图片描述

3.变量提升

// 记住结论即可
// var -> 创建变量
// let -> 创建变量
// const -> 创建常量

// function fn(){
//     // 提前声明name, 这种现象叫变量提升
//     // 站在开发人员的角度分析. 是不合理的.
//     console.log(name);
//     var name = '大马猴'; // 正常人理解. 应该是报错的.
//     // 新版本的js -> es6 对变量的提升进行的修复.
//     // let声明的变量. 没有变量提升
// }
// fn()

// 常量的声明,不希望后续的程序去修改该变量的值
// const BIRTH_DAY = 2000;
//
// BIRTH_DAY = 1998; // 把规范的东西标准化
// console.log(BIRTH_DAY);

变量提升,打印出name undefined
在这里插入图片描述

const 修饰的常量不允许修改,强制修改报错
在这里插入图片描述

4.函数定义方式三:不推荐 (了解) 把代码写在Function()里面

    // var func3 = new Function("alert('我是func3~');alert('woshi3333');");
    // console.log(func3,typeof(func3));
    // func3();
   带参数,前面写参数,后面写代码体
    // var func4 = new Function("x","y","alert(x+y)");
    // func4(5,6);

在这里插入图片描述

5.函数定义方式四:闭包函数

function func5(){
    var a = 100;
    function func6(){
        console.log(a,"<===>");
        return "我是闭包函数";
    }
    return func6;
}

func = func5();
res = func();
console.log(res);

内函数使用了外函数的变量,外函数将内部函数返回出来
func6是闭包函数
在这里插入图片描述

在一个html中引入多个js文件时,大概率会出现变量名冲突的变量
怎样才能让自己代码的变量名与别人的不冲突呢
将变量名设为局部变量

外部要想用到局部变量,则需要将变量返回出来
此时就用到了闭包

// rsa 加密 -> key
// 这里直接用var声明的东西. 自动进window
(function(){
    // 局部变量
    // 外界无法对key进行修改
    var key = "22222222";
    var b64 = function(){
        console.log("我是rsa, 我也需要b64");
    }
    // 提供给外界的一个接口.
    // 外界使用该变量来访问闭包中的功能
    window.rsa = function(){
        console.log("我也要开始加密了. 我是rsa")
        b64();
        console.log(key);
        return "rsa加密结果";
    }
})()

6.函数定义方式五:箭头函数

function mysum(x,y){
    return x+y;
}
res = mysum(5,6)
console.log(res,"<=======11122233=======>");
var mysum = (x,y)  =>  {return x+y;}        
var res = mysum(5,6);
console.log(res,"========3334444=========");

=>箭头函数,把一个函数传递到另一个函数,作为参数
箭头格式不能变,一定得是向右指向
在这里插入图片描述

// if (a > 5) console.log(3333333); // 如果只有一句话.可以省略大括号
// else {
//     console.log(6666666);
// }




// let fn = function(){
//     console.log("你好啊");
// }
//
// fn();
//
// // 箭头函数
// let gn = ()=>{
//     console.log("我不叫赛利亚");
// }
//
// gn();

// setTimeout(()=>{
//     console.log("123")
// }, 1000);

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

 // // 如果只有1个参数. 可以省略()
        // let an = n => {
        //     console.log(n);
        // }
        //
        // an(18);

       
 // // 慢慢捋
        // function fn(n, m){
        //     m(n); //
        // }
        //
        // a = 10;
        // fn(a, n => {
        //     console.log(n);
        // });

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

7.函数参数 (普通位置参数,默认参数)

// js中的形参实参不匹配不会报错
function func7(a,b,c=3){
    console.log(a,b,c);
}
func7(10,11);
func7(10,11,12);
func7(10,11,12,13);

参数写多了也不报错
在这里插入图片描述

只能按位置参数处理,不能用关键字传参
在这里插入图片描述

    console.log("<==============================>")

8.arguments 自动收集所有的实参,是个数组

// 计算任意个数值的累加和;
function func8() {
    // console.log(a,b)
    // console.log(arguments)
    var total = 0;
    for(var i of arguments){
        total += i;
        console.log(i);
    }
    return total;
}
res = func8(1,100,2,3,4,5,56,6);
console.log(res);

收集所有实参,不管有没定义形参,都收集
在这里插入图片描述
在这里插入图片描述

遍历出参数,计算出参数计算结果
在这里插入图片描述

控制台打印
在这里插入图片描述

    </script>
</body>
</html>

3.函数调用

在JavaScript中,常见的有四种不同的方式进行函数调用:

1.作为一个函数进行调用,这是最简单的形式。
2.作为一个方法进行调用,在对象上进行调用,支持面向对象编程。
3.作为构造器进行调用,创建一个新对象。
4.通过apply() 或call() 方法进行调用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的调用</title>
</head>
<body>
    <script>

        function func(){
            console.log("函数正在执行 ... ");
        }

        // 1.正常调用
        func();

        // 2.函数的立即执行,不用手动调用
        (function func2(){
            console.log("函数正在执行2 ... ")
        })();

        // 3.匿名函数的立即执行
        (function(){
            console.log("匿名函数正在执行3 ... ")
        })();

        // 4.其他立即执行的方法;
        !function(){
            console.log("我在执行4 ... ");
        }();

        ~function(){
            console.log("我在执行5 ... ");
        }();


    </script>
</body>
</html>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/435801.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++消息队列处理提高性能的方法

1 消息队列特点 在当前多数软件系统中,处理传递消息多用消息队列机制,他具有以下优点: 1. 异步通信:消息队列支持异步通信,发送者和接收者之间的解耦程度较高。发送者将消息放入队列后即可继续执行,而不需要等待接收者的响应。这样可以提高系统的吞吐量和处理能力。 2.…

删除指定的数

删除指定的数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 先输入10个整数存放在数组中&#xff0c;再输入⼀个整数n&#xff0c;删除数组中所有等于n的数字&#xff0c;数组中剩余的数组保证数组的最前面&#…

电脑键盘快捷键,掌握这些,快速提高效率!

“我是一名电脑新手&#xff0c;在使用电脑时还有很多不懂的。想问问大家平常有什么比较好用的电脑键盘快捷键可以推荐吗&#xff1f;” 在数字化时代&#xff0c;电脑已成为我们生活与工作中不可或缺的工具。掌握一些常用的电脑键盘快捷键&#xff0c;不仅能提高我们的工作效率…

[备赛笔记]——5G大唐杯(5G考试等级考考试基础试题)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

学生信息管理展示-h5版(uniapp+springboot+vue)

记录一下做的第一个完整的h5业务。 一、登录 二、个人中心 三、首页&#xff08;管理员&#xff09; 四、首页&#xff08;学生&#xff09; 五、视频展示 学生信息管理展示&#xff08;h5&#xff09;完整版

如何解决由于浏览器版本升级导致脚本用不了的问题【文章底部可得就业内推码】

目录 1. 使用WebDriverManager&#xff1a; 2. 手动下载更新驱动&#xff1a; 3. 设置浏览器选项&#xff1a; 4. 使用Selenium Grid&#xff1a; 5. 参考官方文档和社区&#xff1a; 面对浏览器版本升级导致的网页自动化脚本无法正常运行的问题&#xff0c;你可以采取以下…

chromedriverUnable to obtain driver for chrome using ,selenium找不到chromedriver

1、下载chromedriver chromedriver下载网址&#xff1a;CNPM Binaries Mirror 老版本在&#xff1a;chromedriver/ 较新版本在&#xff1a;chrome-for-testing/ 2、设置了环境变量还是找不到chromedriverUnable to obtain driver for chrome using NoSuchDriverException:…

Java基础及开发环境配置教程

Java基础 Java是一种广泛使用的编程语言&#xff0c;以其“一次编写&#xff0c;到处运行”的能力而闻名。无论是开发桌面应用程序、Web应用程序还是移动应用程序&#xff0c;Java都是一个优秀的选择。本文将介绍Java的基础知识和如何配置Java开发环境。 1. Java简介 Java是…

【CSP试题回顾】201609-2-火车购票

CSP-201609-2-火车购票 解题思路 初始化座位: 首先&#xff0c;它创建了一个20行5列的二维向量 seatMap 用于表示车厢的座位情况。每个座位按顺序赋予了一个编号&#xff0c;从1到100。这部分代码通过两层循环完成&#xff0c;外层循环遍历所有的排&#xff0c;内层循环遍历每…

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度&#xff0c;为什么这么说呢&#xff0c;举个例子&#xff1a; 在做分类的训练的时候&#xff0c;如果一个样本属于第K类&#xff0c;那么这个类别所对应的输出节点的输出值应…

性能对比:mysql 5.7-8.0-TiDB 7.5-OceanBase 4.2-MariaDB 10.11-机械硬盘-固态硬盘-

1.mysql 5.7-8.0 5.7比8.0优秀 结果&#xff1a;5.7比8.0优秀 10% 2.机械硬盘和固态硬盘 影响不大&#xff0c;主要是CPU 3. JAVA MYSQL 分开 4.『直属 MySQL 』vs 『Docker MySQL』 vs 『Podman MySQL』 直属最好 &#xff0c;其次是Podman&#xff0c;最后是DOCKER 5.MySQL …

CKA考试必备:解锁Pod封装多容器的高级技巧!

往期精彩文章 : 提升CKA考试胜算&#xff1a;一文带你全面了解RBAC权限控制&#xff01;揭秘高效运维&#xff1a;如何用kubectl top命令实时监控K8s资源使用情况&#xff1f;CKA认证必备&#xff1a;掌握k8s网络策略的关键要点提高CKA认证成功率&#xff0c;CKA真题中的节点维…

《JAVA与模式》之责任链模式

系列文章目录 文章目录 系列文章目录前言一、从击鼓传花谈起二、责任链模式的结构三、使用场景四、责任链模式在Tomcat中的应用 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&…

LeetCode_25_困难_K个一组翻转链表

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 模拟 1. 题目 给你链表的头节点 h e a d head head &#xff0c;每 k k k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k k k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节…

Spring之Bean详解

Spring之Bean详解 什么是Bean&#xff1f; 在Spring中&#xff0c;Bean是指由Spring容器管理的对象&#xff0c;这些对象是由Spring IoC容器负责创建、组装和管理的。Bean可以是Java类的实例&#xff0c;也可以是其他Spring管理的组件&#xff0c;例如数据源、事务管理器等。…

【树上倍增】【割点】 【换根法】3067. 在带权树网络中统计可连接服务器对数目

作者推荐 视频算法专题 本文涉及知识点 树上倍增 树 图论 并集查找 换根法 深度优先 割点 LeetCode3067. 在带权树网络中统计可连接服务器对数目 给你一棵无根带权树&#xff0c;树中总共有 n 个节点&#xff0c;分别表示 n 个服务器&#xff0c;服务器从 0 到 n - 1 编号…

Wireshark_labs TCP

在本实验中&#xff0c;我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的“爱丽丝梦游仙境”文本)&#xff0c; 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用&#xff0c;以提供…

Proxmox VE安装CentOS

1、下载CentOS镜像文件 阿里巴巴开源镜像站&#xff1a; https://developer.aliyun.com/mirror/ CentOS 镜像文件 https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso 2、上传ISO镜像 选择ISO镜像上传 3、创建虚拟机 1、点击【创…

python转换json

import json import os from enum import Enumclass LaneDirectionType(int, Enum):LaneDirectionType_Unknown -1 # 类型未知OneWay 1 # 单向TwoWay 2 # 双向# 颜色类型 class ColorCombo(int, Enum):NOUSE 0 # 默认值UNKNOWN 1000 # 未定义WHITE 1 # 白色(默认值…

俄罗斯套娃 (Matryoshka) 嵌入模型概述

在这篇博客中&#xff0c;我们将向你介绍俄罗斯套娃嵌入的概念&#xff0c;并解释为什么它们很有用。我们将讨论这些模型在理论上是如何训练的&#xff0c;以及你如何使用 Sentence Transformers 来训练它们。 除此之外&#xff0c;我们还会告诉你怎么用这种像套娃一样的俄罗斯…