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

news2025/3/15 0:23:52

在这里插入图片描述

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

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

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

文章目录

  • 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>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序python+django+uniapp公交路线查询系统

原生wxml开发对Node、预编译器、webpack支持不好&#xff0c;影响开发效率和工程构建。所以都会用uniapp框架开发 前后端分离&#xff0c;后端给接口和API文档&#xff0c;注重前端,接近原生系统 APP性能需求 &#xff08;1&#xff09;用户在安卓APP页面各种操作可及时得到反馈…

【项目】图书管理系统

目录 前言&#xff1a; 项目要求&#xff1a; 知识储备&#xff1a; 代码实现&#xff1a; Main&#xff1a; Books包&#xff1a; Book&#xff1a; BookList&#xff1a; Operate包&#xff1a; Operate: addOperate: deleteOperate: exitOperate: findOperate:…

express基础

express express介绍 官网传送门基于 Node.js 平台&#xff0c;快速、开放、极简的 Web 开发框架express特点 Web 应用 Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架&#xff0c;它提供一系列强大的特性&#xff0c;帮助你创建各种 Web 和移动设备应用。…

UniSA: Unified Generative Framework for Sentiment Analysis

文章目录 UniSA&#xff1a;统一的情感分析生成框架文章信息研究目的研究内容研究方法1.总体架构图2.基准数据集SAEval3.Task-Specific Prompt4.Modal Mask Training5.Pre-training Tasks5.1Mask Context Modeling5.2Sentiment Polarity Prediction5.3Coarse-grained Label Con…

Object.keys()的用法

1、语法 Object.keys(obj) 参数&#xff1a;要返回其枚举自身属性的对象 返回值&#xff1a;一个表示给定对象的所有可枚举属性的字符串数组 2、处理对象&#xff0c;返回可枚举的属性数组 let person {name:“张三”,age:25,address:“深圳”,getName:function(){}} Obj…

第七十六 天WAF攻防-权限控制代码免杀异或运算变量覆盖混淆加密传参

第76天 WAF攻防-信息收集&识别&被动探针&代理池&仿指纹&白名单 知识点&#xff1a; 0、WAF介绍&模式&识别&防护等 1、信息收集被动扫描&第三方接口 2、信息收集基于爬虫&文件目录探针 3、信息收集基于用户&代理池&白名单 章…

【QT】定时器事件应用

public&#xff1a;//定时器void timerEvent(QTimerEvent *);private:int id;#include <QTimerEvent> //QWidget 默认不追踪鼠标事件 mylabel::mylabel(QWidget *parent) : QLabel(parent) {this->setMouseTracking(true);//启动定时器//参数1&#xff1a;触发定时器的…

f5——>字符串三角

暴力破解&#xff0c;双层循环&#xff0c;注意复制到新列表用append&#xff0c;这样更不容易出错 格式还是“”.join(str)

本地部署websocket服务端并结合内网穿透实现固定公网地址连接

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

leetcode 3068. 最大节点价值之和【树形dp】

原题链接&#xff1a;3068. 最大节点价值之和 题目描述&#xff1a; 给你一棵 n 个节点的 无向 树&#xff0c;节点从 0 到 n - 1 编号。树以长度为 n - 1 下标从 0 开始的二维整数数组 edges 的形式给你&#xff0c;其中 edges[i] [ui, vi] 表示树中节点 ui 和 vi 之间有一…

二维码门楼牌管理系统应用场景:助力紧急服务

文章目录 前言一、紧急服务部门的传统挑战二、二维码门楼牌管理系统的优势三、实际应用案例分析四、未来展望 前言 随着城市化的快速发展&#xff0c;传统的门牌管理系统已无法满足现代社会的需求。二维码门楼牌管理系统的出现&#xff0c;为紧急服务部门&#xff08;如警察、…

鸿道Intewell-Win_V2.1.3_kyland软件版本发布说明

一、软件发布版本信息 版本号&#xff1a;V2.1.3_kyland 版本发布类型&#xff1a;trail试用版本 二、版本特点 适配 E211-1370&#xff08;J6412,8GB&#xff0c;256GB SSD&#xff09;设备 三、运行环境推荐 Intewell developer可以运行在windows7及windows10 64位 四、支…

精品中国货出海wordpress外贸独立站建站模板

旗袍唐装wordpress外贸网站模板 旗袍、唐装、华服wordpress外贸网站模板&#xff0c;适合做衣服生意的外贸公司官网使用。 https://www.jianzhanpress.com/?p3695 劳动防护wordpress外贸独立站模板 劳动防护wordpress外贸独立站模板&#xff0c;劳动保护、劳动防护用品外贸…

个人博客系列-后端项目-用户验证(5)

介绍 创建系统管理app&#xff0c;用于管理系统的用户&#xff0c;角色&#xff0c;权限&#xff0c;登录等功能&#xff0c;项目中将使用django-rest_framework进行用户认证和权限解析。这里将完成用户认证 用户验证 rest_framework.authentication模块中的认证类&#xff…

基于Python实现银行卡识别

在本文中将介绍如何使用Python和深度学习技术来实现银行卡识别功能。银行卡识别是一个在金融、安全等领域具有重要应用的问题&#xff0c;将使用深度学习模型来实现银行卡图像的识别和分类。 目录 引言数据集准备预处理和特征提取模型选择与训练模型评估与性能优化部署与应用 引…

怎么做加密文件二维码?分享文件更安全

怎么做一个加密文件二维码&#xff1f;在日常的工作和生活中&#xff0c;通过扫描二维码来查看或者下载文件的方式&#xff0c;被越来越多的人所使用&#xff0c;一方面是二维码的成本低&#xff0c;另一方面有利于提升便捷性和用户体验。 为了保证内容的隐私性和安全性&#…

Linux学习笔记——基本操作命令

目录 一、Shell 命令基础1、Shell 简介2、Shell 命令格式3、显示系统信息命令4、Shell 使用技巧 二、Linux 文件及目录管理1、Linux操作系统的目录结构2、文件及目录显示类命令3、文件及目录操作类命令4、文件内容的显示和处理5、文件查找类命令 三、vi、vim 编辑器的使用四、文…

以太网帧格式

以太网帧格式 以太网帧格式前导码&#xff08;Preamble&#xff09;帧起始界定符&#xff08;SFD&#xff0c;Start Frame Delimiter&#xff09;以太网帧头目的MAC地址源MAC地址长度/类型 数据段帧检验序列&#xff08;FCS&#xff0c;Frame Check Sequence&#xff09;帧间隙…

Vue全家桶:vue2+vue3全部搞懂:第八篇,重要!正式工程化项目开发——开始怎么写代码

前提&#xff0c;建议先学会前端几大基础&#xff1a;HTML、CSS、JS、Ajax&#xff0c;不然不好懂 这一专栏知识将一次性将vue、vue2、vue3全部讲明白 这一篇内容蛮多&#xff0c;我本人也打算加快学习速度&#xff0c;于是下面大量解释将出自于黑马程序员的视频课堂截图&…

Java面试篇【RabbitMQ】常见面试题(2024最新)

RabbitMQ 1.为什么使用MQ?优点是什么 因为MQ可以异步处理&#xff0c;提高系统吞吐量。 应用解耦&#xff0c;系统之间可以通过消息通信&#xff0c;不关心其他系统的处理。 流量削峰&#xff0c;可以通过消息队列的长度&#xff0c;控制请求量。可以缓解短时间内的高并发请…