深入探讨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<15000var 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);// 获取星期 getDayvar 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(初始值;判断条件;自增自减的值){code1code2..}先执行1,2满足后执行代码体然后执行3,2满足后在执行代码体以此类推...直到不满足条件终止循环;*/// 打印 1~100for(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 = 0while(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.mzph.cn/news/726134.shtml

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

相关文章

九型人格测试,7号活跃型人格的职业分析

九型人格中的7号人格&#xff0c;也叫活跃型人格&#xff0c;正如名字所形容的那样&#xff0c;一个活跃型人格的人&#xff0c;会让你体会到生活的乐趣。跟他们在一起的时候&#xff0c;永远不会感到无聊&#xff0c;即便是在停电的下午&#xff0c;也能在屋子里愉快的折腾。活…

【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】

文章目录 【RK3288 Android6&#xff0c; T8PRO 快捷按键 gpio 配置上拉输入】需求开发过程尝试找到没有用的上拉gpio尝试修改pwm1的gpio的默认上拉模式 改动 【RK3288 Android6&#xff0c; T8PRO 快捷按键 gpio 配置上拉输入】 需求 T8pro想要模仿T10 的 快捷按键&#xff…

MyBatisPlus(SpringBoot版)的分页插件

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖&#xff0c;改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP&#xff08;mybatisplus&#xff09;的分页插件 二、使…

GWO-RF|灰狼算法优化随机森林 回归预测|多变量回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 灰狼优化算法&#xff1a; 随机森林&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; …

疾控中心污水采样器自动采样——解放双手更轻松

疾控中心使用的污水采样器如今已经实现了自动化采样&#xff0c;这无疑给工作人员带来了极大的便利。这种设备能够完成污水取样、储存等环节&#xff0c;不再需要人工干预。这意味着工作人员可以解放双手&#xff0c;不再需要进行繁重的取样工作。 这种自动化的采样方式不仅减轻…

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 # 白色(默认值…

ffmpeg maxrate 导致转码输出的内容包含随机性

https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate 问题 领导提出了一个问题&#xff0c;为什么转码后的视频大小字节数据都不一样&#xff0c;这问到我了&#xff0c;一时语塞。查一下吧&#xff0c;没有什么资料支撑。主动试一下。 尝试 首先尝试一下直接…

C#,动态规划的集合划分问题(DP Partition problem)算法与源代码

1 动态规划问题中的划分问题 动态规划问题中的划分问题是确定一个给定的集是否可以划分为两个子集&#xff0c;使得两个子集中的元素之和相同。 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程…

Python基础一

Python是一门简单的编程语言&#xff0c;适用于人工智能、web应用、爬虫程序、大数据等方面 一、Python语言特点 Python 是一种功能强大且流行的编程语言&#xff0c;具有许多特点&#xff0c;其中一些包括&#xff1a; 1. **易学易用** Python 的语法简洁清晰&#xff0c;类…

【go语言开发】gorm库连接和操作mysql,实现一个简单的用户注册和登录

本文主要介绍使用gorm库连接和操作mysql&#xff0c;首先安装gorm和mysql依赖库&#xff1b;然后初始化mysql&#xff0c;配置连接池等基本信息&#xff1b;然后建表、完成dao、controller开发&#xff1b;最后在swagger中测试 文章目录 前言安装依赖库数据库初始化账号注册和登…

springBoot整合Redis(三、整合Spring Cache)

缓存的框架太多了&#xff0c;各有各的优势&#xff0c;比如Redis、Memcached、Guava、Caffeine等等。 如果我们的程序想要使用缓存&#xff0c;就要与这些框架耦合。聪明的架构师已经在利用接口来降低耦合了&#xff0c;利用面向对象的抽象和多态的特性&#xff0c;做到业务代…

上市公司财务报表精讲系列一:黄山旅游

上市公司财务报表精讲系列一&#xff1a;黄山旅游 一、主营业务分行业、分产品、分地区情况二、董事会报告三、净利润现金流四、净资产收益率五、权益乘数和总资产周转率六、负债结构图七、行业分析八、案例总结九、2023年度业绩 一、主营业务分行业、分产品、分地区情况 二、董…

为国产信创服务器提供LDAP统一身份认证方案

金融信创作为 8 大行业信创之首&#xff0c;早已成为其他行业信创建设的参考。金融行业有着极为复杂的业务场景&#xff0c;对系统有着极高的稳定可靠需求&#xff0c;因此&#xff0c;在寻找微软 AD 国产化替代方案时&#xff0c;常会涉及到更深层次的场景。例如&#xff0c;最…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 &#xff0c;因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment&#xff0c;BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容&#xff0c;而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

学习 考证 帆软 FCP-FineBI V6.0 心得

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

MyBatis复杂映射开发之多对多查询

多对多查询的模型 用户表和角色表的关系为&#xff0c;一个用户有多个角色&#xff0c;一个角色被多个用户使用。 多对多查询的需求&#xff1a;查询所有用户的同时查询出该用户对应的所有角色。 startuml !theme plain top to bottom direction skinparam linetype ortho cl…

阿里云服务器使用教程_搭建网站教程_2024建站教程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

智能网联各地市政策盘点

本文旨在对2023年及2024年初各地市所出台的智能网联相关政策进行全面的梳理与总结。通过与此前发布的关于2023年和2024年初各部委、省、直辖市智能网联相关政策的盘点相互呼应&#xff0c;力求为读者呈现一个全面、系统的政策概览。 文 | 吴冬升 全文6000字&#xff0c;预计阅读…