07_JavaScript函数作用域_递归
目录
一、作用域(重点)
二、变量的使用规则 (重点)
2.1 访问规则
2.2 赋值规则
三、递归函数 (难点) 了解
四、对象
4.1 对象的创建
一、作用域(重点)
-
什么是作用域 ?
作用域(上下文),就是一个变量可以生效的范围!!!
变量并不是所有的地方都可以使用,而这个变量的使用范围就是作用域
- 作用域有两个
-
全局作用域
- 全局作用域就是最大的作用域
- 在全局作用域下定义的变量可以在任何地方使用
- 这个作用域会一直存在,直到页面关闭就销毁了var num = 100;
var num1 = 200;if(true){console.log(num,num1);
}function fn(){console.log(num,num1);
}
fn();console.log(num,num1);
- 局部作用域
- 在js中 只有函数能生成局部作用域,别的都不行!!!
- 局部作用域就是在全局作用域下开辟出一个相对小的作用域
- 局部作用域的变量只能在这个作用域内使用
- 每一个函数 都是一个局部作用域function fn1(){// 就是一个局部作用域var num = 100;console.log(num);
}
//console.log(num); //num is not defined
fn1();function fn2(){var aaa = "hhh";console.log(aaa);console.log(num);// num is not defined
}
fn2()
二、变量的使用规则 (重点)
-
有了作用域以后,变量有了使用范围,也有了使用规则
-
变量的使用规则
访问规则
和赋值规则
2.1 访问规则
-
当我想获取一个变量的值的时候,这个行为就叫访问
-
访问的规则
-
首先,先在自己的作用域内部查找,如果有,就拿来用
-
如果没有,就去上一级作用域查找,如果有,就拿来用
-
如果没有,就继续去上一级,以此类推
-
如果一直找到全局作用域都没有这个变量,就会报错(变量名 is not defined)
-
变量的访问规则 也叫 作用域 查找机制
-
作用域的查找机制只能向上找,不能向下找
-
var num1 = 100;function fn(){var num2 = 200;function fn1(){var num3 = 300;console.log(num3);//300 先在自己的作用域内部查找,如果有,就拿来用console.log(num2);//200 如果没有,就去上一级作用域查找,如果有,就拿来用console.log(num1);//100 如果没有,就继续去上一级,以此类推console.log(a);// a is not defined}fn1();}fn();
// 作用域的查找机制只能向上找,不能向下找function fn1(){var num = 100;}fn1();console.log(num);// 发现自己就是全局作用域,自己是全局的没有上一级了,直接报错
2.2 赋值规则
-
当你给一个变量赋值的时候,就先找到这个变量,在给他赋值
-
赋值规则
-
先在自己作用域内部查找,有就直接赋值
-
没有就去上一级作用域查找,有就赋值
-
还没有在去上一级,一次类推 有就直接赋值
-
function fn1(){var username = "张三";function fn2(){username = "李四";console.log(username); //李四}fn2();console.log(username);//李四
}
fn1();
-
如果一直找到全局作用域都没有,那么就把这个变量定义乘全局变量,在给他赋值
function fn2(){function fn3(){num = 100;}fn3();
}
fn2();
console.log(num); //100
三、递归函数 (难点) 了解
-
在编程里,递归就是一个自己调用自己的手段
-
递归函数:一个函数内部,调用了自己,循环往复
// 这是一个简单的递归函数,
// 在函数内部调用了自己,函数一执行,就调用自己一次,在调用在执行 不会停止!!!
// 会是一个死递归,类似循环 死递归 会爆栈
function box(){console.log("哈哈哈哈哈递归!!!");box();
}
box(); Maximum call stack size exceeded "超出最大调用堆栈大小"
-
所以 咱们只要写了递归,就需要停止, 通过
return
停止这个return 就是递归的归
var count = 0;
function fn(num){count++;console.log("我是递归函数");if(count===10){return;}fn()
}
fn()
练习:使用递归求和 1-5的和??
// /练习:使用递归求和 1-5的和?? // 1- 5+fn(4)+fn(3)+fn(2)+fn(1)function fn(n){// 递归的归if(n==1){return 1}// 调用自己 fn()return fn(n-1) + n;}var res = fn(5);console.log(res);// 分析// 1、fn(5)-> 此时 n=5 if条件不成立 执行return fn(4) + 5;1+2+3+4+5// 2、fn(4)-> 此时 n=4 if条件不成立 执行return fn(3) + 4;1+2+3+4// 3、fn(3)-> 此时 n=3 if条件不成立 执行return fn(2) + 3;1+2+3// 4、fn(2)-> 此时 n=2 if条件不成立 执行return fn(1) + 2; ==>1+2// 5、fn(1)-> 此时 n=1 if条件成立了 返回1
四、对象
-
对象是一个复杂数据类型
-
也不是很复杂,只不过是存储了一些基本数据类型的一个集合
-
对象就是键值对 集合
var obj = {num:100,str:"hello",boo:true,username:"张三"
}
注意:对象{} 和函数{}是完全不一样
函数里写的是逻辑代码,,而对象里写的是一些数据!!!
4.1 对象的创建
-
字面量方式创建
// 先创建一个空对象
var obj = {};
obj.name = "Jack";
obj.age = 18;
obj['age'] = 19;
obj.address = "河南省商丘市";
console.log(obj);
-
内置的构造函数创建对象
// js内置的狗仔函数创建对象//parseInt("19.11px"); //19//js内置构造函数??? 其实也是函数 构造函数首字母大写// 构造函数需要 new 关键字去创建var obj = new Object();obj.username="嘿嘿嘿";obj.age = 19obj['address'] = "北京市海淀区"console.log(obj);
-
for in 可以遍历(循环)对象
// 如果想获取每一个键值对 就通过 for infor(var key in obj){console.log(key); // 获取到的键值对的 键名console.log(obj[key]); // 获取到的键值对的 值}
作业:
利用递归求100的阶乘 fn(n) = fn(n-1) *n
相关文章:
07_JavaScript函数作用域_递归
目录 一、作用域(重点) 二、变量的使用规则 (重点) 2.1 访问规则 2.2 赋值规则 三、递归函数 (难点) 了解 四、对象 4.1 对象的创建 一、作用域(重点) 什么是作用域 ? 作用…...
基于大模型预测的初治菌阳肺结核诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、初治菌阳肺结核概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 传统诊疗方法与局限性 三、大模型在初治菌阳肺结核预测中的应用原理 3.1 大模型技术简介 3.2 数据收集与预处理 3.3 模型构建与训练 3.4 模型…...
C# Modbus TCP/IP学习记录
Modbus协议中,角色分为主站(Mater)、从站(Slave);数据类型分为线圈(Coil)、离散输入(Input)、保持寄存器(HoldingRegister)、输入寄存…...
斜线、短横、空格,三种分隔日期的优雅解析(Python | DeepSeek)
标准日期解析操作,str.replace链式如灵蛇蜿蜒,三元表达式像空灵仙家妙法。 笔记模板由python脚本于2025-03-25 22:32:24创建,本篇笔记适合三元表达式、字符串操作修习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在…...
Skynet 中 snlua 服务启动整体流程分析
前言: 在 Skynet 中,Lua 扮演了极其重要的角色。Skynet 大多数业务逻辑都跑在一个个 Lua 服务里,而能够将 Lua 环境嵌入到 Skynet 框架下,并与 Skynet 消息调度机制完美结合,正是 snlua 服务所承担的核心功能。 本文将…...
RWA代币化崛起中的香港机遇:数字金融新枢纽的破局之道
引言:全球资产代币化浪潮中的香港坐标 在2025年全球金融数字化重构的关键节点,RWA(现实世界资产代币化)市场以年均740%的增速重塑价值流动规则。香港凭借独特的政策创新、跨境枢纽优势及庞大的资产储备,正从传统金融中…...
Docker Compose介绍
基本概念 Docker-Compose是Docker官方的开源项目,负责实现对docker容器集群的快速编排。 可以这么理解,docker compose是docker提出的一个工具软件,可以管理多个docker容器组成一个应用,只需要编写一个YAML格式的配置文件docker…...
【LeetCode 题解】算法:15.三数之和
一、问题描述 在 LeetCode 上有这样一道经典的算法题,题目要求给定一个整数数组 nums,找出所有不重复的三元组 [nums[i], nums[j], nums[k]],需要满足以下两个条件: 三个元素的索引互不相同,即 i ! j,i ! …...
springboot使用阿里限流框架-sentinel
当前项目源码 控制台下载 启动bin中的看板服务:账号密码:sentinel/sentinel 官方文档地址 项目引入依赖 <!-- sentinel注解支持 --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj<…...
Ubuntu20.04系统安装IsaacSim4.5与IsaacLab环境
Introduction 今天用自己的Ubuntu20.04系统安装最新更新的IsaacSim 4.5 与 最新版的IsaacLab遇到了问题,且这个问题组里师兄之前也遇到了,我的解决方法是从头来过,所及记录一下。 IsaacSim现在支持pip安装,但是Ubuntu20.04的pip…...
【大模型】数字人 EchoMimicV2 的环境配置和使用
一、EchoMimicV2的简单介绍 EchoMimicV2是EchoMimicV1的升级版本,旨在通过音频驱动生成更加自然和流畅的半身人类动画。它能够让用户仅通过简单的音频输入,生成与声音内容相匹配的动画效果,使虚拟人物看起来更加生动。 作者:由蚂蚁…...
导入 Excel 规则批量修改或删除 PDF 文档内容
需要对 PDF 文档内容进行修改的时候,通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候,有什么方法可以帮我们实现批量操作呢?今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…...
2.Excel :快速填充和拆分重组
一 案例1:快速填充 电子邮件中包含每个人的人名,现在要提取电子邮件中的姓名到名字列。 方法1:将 Nancy 复制到单元格后,邮件会高亮,然后输入A的时候系统就会知道提取名字了。 补充:如果第三个位置输入错误…...
python tkinter 开发蓍草占卜系统
1. 项目概述 1.1 简介 蓍草占卜是中国传统的占卜方法,用于演算六十四卦。本系统通过现代编程技术,将传统的蓍草占卜方法数字化,提供一个准确、便捷的占卜工具。 蓍草占卜,作为中国古代的一种传统占卜方法,承载着深厚…...
综合小实验之电视机
综合小实验1 一、实验拓扑图 二、实验要求 按照图示配置IP地址;按照图示区域划分配置对应的动态路由协议;在R7上配置dhcp服务器,能够让pc可以获取IP地址;将所有环回⼝宣告进ospf中,将环回⼝7宣告进rip中,…...
全排列|| 分发饼干 摆动序列
1.给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]] 示例 2: 输入:nums [1,2,3] 输出:[[1,2,3…...
【开源宝藏】用 JavaScript 手写一个丝滑的打字机动画效果
你当前项目实现了一个非常丝滑的 打字机文字效果动画,使用的是自定义的 typical.js 脚本。下面我将给出一份逐步拆解的中文教程,帮你或其他初学者快速上手并自定义这个打字效果。 ✨ 最终效果 打开页面后,中央会逐字显示: Hello…...
推荐1款简洁、小巧的实用收音机软件,支持手机和电脑
聊一聊 没想到现在还有人喜欢听广播。 我一直以为听广播必须要用那种小广播机才可以。 原来手机或电脑上也是可以的。 今天给大家分享一款可以在电脑和手机上听广播的软件。 软件介绍 龙卷风收音机 电台广播收音机分电脑和手机两个版本。 电脑端无需安装,下载…...
64. MfgTool烧写工具详解
一、MfgTool工具简介 1、mfgtool是NXP官方做的向I.MX系列烧写系统的软件,运行在windows下。可以烧写uboot.imx、zImage、dtb,rootfs。通过USB烧写。 Mfgtool里面默认存放了NXP官方开发板的系统文件, 2、基本原理 向开发板烧系统分两部分&am…...
3、孪生网络/连体网络(Siamese Network)
目的: 用Siamese Network (孪生网络) 解决Few-shot learning (小样本学习)。 Siamese Network并不是Meta Learning最好的方法, 但是通过学习Siamese Network,非常有助于理解其他Meta Learning算法。 这里介绍了两种方法:Siamese Network (孪生网络)、Trplet Loss Siam…...
前端学习笔记--CSS
HTMLCSSJavaScript 》 结构 表现 交互 如何学习 1.CSS是什么 2.CSS怎么用? 3.CSS选择器(重点,难点) 4.美化网页(文字,阴影,超链接,列表,渐变。。。) 5…...
开个坑记录一下树莓派4B部署yolo的一些问题
问题一:操作系统与内核信息 这个问题困扰了我一天半,下载的时候显示的信息是aar64的系统,但是这并无意味着一个问题,那就是你的操作系统是64位的。需要采用如下的指令查看: getconf LONG_BIT 我在树莓派得出来的操作…...
1.1 结构体与类对象在List中使用区别
一、问题的起源如下的代码是错误的,无法编译通过 struct Point {public int X;public int Y; }List<Point> points new List<Point> { new Point { X 1, Y 2 } }; points[0].X 10; // 编译错误!无法修改副本的字段 二、原因分析 在C#中&…...
详细说明windows系统函数::SetUnhandledExceptionFilter(ExceptionFilter)
::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 编程中用于设置顶层未处理异常过滤器的关键 API 调用。它属于 Windows 结构化异常处理(SEH, Structured Exception Handling)机制的一部分,主要用于捕获那些未被程序内部处理的异…...
力扣刷题39. 组合总和
39. 组合总和 - 力扣(LeetCode) 需要定义一个index变量用来记录访问数组的下标,每次递归进行传参,在搜索过程中,因为为了避免重复数据,而且允许一个元素的重复出现,传入index时传入当前遍历的i…...
正弦函数的连续傅里叶变换正弦序列的DTFT
正弦序列 时域 x [ n ] sin ( ω 0 n ) x[n] \sin(\omega_0 n) x[n]sin(ω0n)频域 X ( e j ω ) j π 2 [ δ ( ω − ω 0 ) − δ ( ω ω 0 ) ] X({\rm e}^{{\rm j}\omega}) \frac{{\rm j}\pi}{2} \left[ \delta(\omega - \omega_0) - \delta(\omega \omega_0…...
winstart.wsf 病毒清理大作战
0x00 背景 发现感染了winstart.wsf 病毒如何清理。 0x01 现象 遍历Users下每个目录以及C:\和C:\Windows\Temp 2个目录写入病毒文件。 C:\Users\Administrator\AppData\Local\Temp\winstart.wsf C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Program…...
leetcode 20.有效括号
20. 有效的括号 - 力扣(LeetCode) class Solution:def isValid(self, s: str) -> bool:stack []for i in s :if i in ((,{,[ ):stack.append(i)elif i in () ):# 这种情况是 栈弹出元素为空时候 ,右半部分的括号多出来一些 比如&#x…...
Leetcode刷题笔记1 图论part07
卡码网 53 寻宝 prim算法 prim算法核心就是三步,称为prim三部曲: 第一步,选距离生成树最近节点第二步,最近节点加入生成树第三步,更新非生成树节点到生成树的距离(即更新minDist数组) def p…...
unittest自动化测试实战
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 为什么要学习unittest 按照测试阶段来划分,可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程…...
flask,示例及解释
1) from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(m1index.html)app.route(/get_type) def get_type():return ["语文", "数学"]if __name__ __main__:app.run(host0.0.0.0…...
电机倍频曲线的一些奇异特性-原因分析及应用
这里对感应电机倍频曲线的特征进行了说明,然后将其特性用于电机转差率和工况的测量。先给出可以直接利用的结论: 电机的工况和转差率谱线会体现为5x,7x谱线调制在基频附近。两条调制过携带s信息的谱线距离基频谱线的距离。 与真实转速相对同步转速的频差…...
基于Ebay拍卖网站成交价格的影响因素分析
摘要:近些年来网上拍卖的不断地发展,网上购物慢慢变成了大家普遍接受的购物方式。因此关于网上拍卖的研究日益成为很多人研究的重点。 影响拍卖网站价格的因素很多,但很少有人分得清楚哪些因素才是比较重要的因素,因此对价格因素分析&#x…...
详解图卷积网络
文章目录 GCN/RGCN图卷积网络概述--运作原理**1. GCN(Graph Convolutional Network,图卷积网络)****1.1 核心思想****1.2 公式****1.3 特点****1.4 总结** **2. RGCN(Relational Graph Convolutional Network,关系型图…...
Java 8-17核心特性全景解析之Java9、10
Java 9 核心特性解析 Java 9在2017年9月发布,带来了模块系统等重大变革,是Java平台现代化的重要一步。 模块系统 (Project Jigsaw) 特性概述 模块系统是Java 9最重要的特性,旨在解决Java平台和应用程序的可伸缩性问题,提供更好…...
mysql的学习
关系性数据库需要遵循ACID规则 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,例如转账业务中ÿ…...
leecode 560题
一、题目解析 题目如下->: 这道题的问题是,找到目标值为k的所有连续子串个数,因此最简单最容易想到的就是枚举 两个指针枚举起来确实可以解决,但是时间复杂度极大,达到了O(n^2)的级别 因此这不是我们想要的 二、解题思路 2.1 …...
借壹起航东风,中国工厂出海开启新征程
在经济全球化不断深入的当下,中国工厂正以积极的姿态投身海外市场,渴望在全球商业版图中占据一席之地,绽放独特的光彩。然而,出海之路充满了挑战与艰辛,品牌塑造困难重重、询盘量不稳定、营销成本居高不下等问题&#…...
Joomla教程—查看网站的前台页面与菜单管理(栏目管理)
原文:Joomla 查看网站的前台页面_w3cschool 在本节中,我们将简单介绍一下JOOMLA的前台界面。通过本节的介绍,希望你能对JOOMLA的界面组成有一个大致的了解。 你可以直接在浏览器中输入http://localhost/zmax/ 就会出现我们网站的首页了。也…...
HCIA-WLAN实验
1、划分VLAN,配置IP地址 2、配置AC作为AP的DHCP服务器自动为AP分配IP地址 dhcp enable interface Vlanif100 dhcp select interface 3、建立CAPWAP隧道 capwap source interface vlanif100 4、配置WLAN业务配置,下发至AP ①配置:wlan …...
DNA-PAINT
参考: 【科研教程】NUPACK网页版使用教程 https://www.bilibili.com/video/BV1G94y1W7mN/NUPACK新版网页版教程-模拟部分 https://zhuanlan.zhihu.com/p/678730568NUPACK 4.0 User Guide https://docs.nupack.org/NUPACK网页版使用指南 https://zhuanlan.zhihu.com/p/55024017…...
VS2022的第一个Qt程序——实战《加载并显示图像》
目录 一、UI设计 S1:双击Form Files下.ui文件,进入ui设计界面Qt Designer S2:然后拖动一个Push Button和Label控件到界面 S3:点击信号与槽,然后点击PushButton往外拉一下 S4:松开鼠标进入配置连接界面…...
从概率到梯度:理解分类问题中交叉熵的优越性
分类问题一般使用交叉熵(Cross-Entropy)而不是平方损失(Square Loss)函数1. **概率解释**2. **梯度性质**3. **对错误的惩罚**4. **计算复杂度**5. **总结** 分类问题一般使用交叉熵(Cross-Entropy)而不是平…...
如何选择?Postman vs JMeter 对比介绍
Postman 和 JMeter 作为两款主流测试工具,各有特色。本文将从多个维度详细对比这两款工具最新特性和应用场景。 工具基本介绍 对比项 Postman JMeter 类型 API 开发和测试工具 性能测试工具 开源情况 闭源,提供免费版 开源(Apache L…...
P1182 数列分段 Section II
P1182 数列分段 Section II - 洛谷 题目描述 对于给定的一个长度为 N 的正整数数列 A1∼AN,现要将其分成 M(M≤N)段,并要求每段连续,且每段和的最大值最小。 关于最大值最小: 例如一数列 4 2 4 5 1…...
Thales靶场
信息收集 将靶机改为net模式,开启kali进行扫描,得到靶机ip 对靶机的端口,目录进行扫描,8080端口是 apache tomcat代理 进入8080端口,点击app出现登录窗口,弱口令没试出来,可以爆破登录窗口 查…...
系统思考—看见未来
感谢上海财经大学终身教育学院的持续邀请!每个月,都会带着不同的思维火花,走进财大与学员们一起探索系统思考的奥秘。 这次为宜宾市的干部们带来了一场深刻的学习体验。通过系统思考,帮助大家从整体视角去发现问题、分析问题、解…...
第30周Java分布式入门 ThreadLocal
ThreadLocal 课程笔记 一、章节结构概述 本章主要学习重要的工具类 ThreadLocal。章节分为六大模块: ThreadLocal 的两大使用场景ThreadLocal 所带来的好处ThreadLocal 的主要方法及使用顺序ThreadLocal 原理源码分析使用 ThreadLocal 的注意点和使用规范 从下一…...
Windows 10 LTSC 2019 中文版下载及安装教程(附安装包)
(cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24)涵盖常见疑问和注意事项: cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24 下载链接:https://pan.quark.cn/s/c2c8f3cd18f1 1. 镜像文件来源与合法性 官方渠道&…...
死亡并不是走出生命 而是走出时间
目录 第一章 倒春寒 第二章 悖论与共生 第三章 坍缩与永恒 第四章 在时差里相爱 终章 你从未离开 第一章 倒春寒 2022年春天的扬州东关街,青衣在文昌阁古槐下调试着「时间胶囊」算法。这个能将人类记忆转化为数据流的程序,是他用三年时间对抗渐冻…...