当前位置: 首页 > backend >正文

javascript day4

函数

函数:实现某一特定功能的代码的集合

作用:可以提高代码的高度复用

js函数声明

function 函数名([参数]){

函数体

}

function say_hi(){
alert("hello")
}//函数的声明
say_hi()//函数的调用

函数的声明,函数声明之后不会自动执行,想要执行需要进行函数的调用

paseInt()-----转整型

函数的参数

  

0----100 num1-num2

<script>
function he(num1,num2){
let sum=0
for(let i=num1;i<=num2;i++){
if(i%2==0){
sum+=i}}
return sum//返回值
}
he(100,200)
</script>

underfined:如果一个函数没有设置返回值,那么它的返回值就是underfined

return 返回值——只能返回出去一个值

函数中遇到return会立即退出函数。return后面的代码不会被执行

变量的作用域

变量名生效的范围

根据变量的作用范围,变量分为全局变量和局部变量

全局变量:在全局当中都可以使用的变量 

局部变量:在函数内部声明的变量,局部变量的作用域是在函数体内生效的,形参也可以看作是局部变量

块作用域

{}if for

作用域链

作用域就近原则——现在自身找若没有,再去上一级找

值传递和引用传递

原来数不会变,基本是占内存了

引用数据类型

栈内存:

基本数据类型实际数据存储在栈内存

引用数据类型实际数据存储在堆内存,栈内存存储的是堆内存的内存地址

函数作为参数进行传递

一个函数A作为另外一个函数B的参数,那么该函数A就叫做回调函数

<script>
function test(){
document.writeln("test1")
}
function test2(fn){
fn()
document.writeln("test2")
}
//函数后面带(),则立即执行
test2(test1)
</script>

在吧函数作为参数传递的时候一定不能带()

arr.forEach(回调函数)

默认值参数

默认值参数必须在普通参数后面

求圆面积的函数

<script>
function area(r,PI=3.14){
return PI*r*r
}
let a=area(2)
console.log(a)
</script>

可变长参数

求和函数

<script>
function get_sum(){
console.log(arguments)//arguments为伪数组
let sum=0
foe(let i in arguments){
sum+=arguments[i]
}
console.log(sum)
}
let a=get_sum()
</script>

匿名函数

没名字的函数

函数作为某个函数的参数——用匿名函数

<script>
let fn=function(){
alert("这是函数表达式")
}
</script>

箭头函数

是为了简化函数的写法,以及解决this关键字指向问题的

箭头函数不需要加return

<script>
let fn=()=>{
console.log(123)
}
fn()
</script>
<script>
let fn=(x,y)=>x+y
console.log(fn())
</script>

函数的递归

函数自身调用自身

求阶乘

<script>
function get_jiec(num){
//递归接口
if(num==1){
return 1
}else{
return get_jiec(num-1)*num
}
</script>

求累加和的函数

 <script>function get_lj(num){if(num==1){return 1}else{return get_lj(num-1)+num}}alert(get_lj(5))</script>

url编码decodeURI

url解码encodeURI

eval:跳转网页

闭包

闭包可以解决全局污染的问题,可以让函数当中的某个变量常驻在内存当中

如果一个函数使用了外层函数的局部变量,访问了其他作用域的变量,那么内层函数叫闭包

统计函数被调用的次数

<script>
function outer(){
let num=1
function inner(){//return num
console.log(num)
}
inner()
}
outer()
</script>
//全局变量容易被污染

改变不了num

缺点:若变量多,占用内存多

用闭包统计函数调用的次数问题

 <script>let num=1function outer(){let num1=0function inner(){num1++document.writeln(`这个函数调用了${num1}次了`)}return inner()}let a=outer()
a()
a()
a()</script>

数组的高级方法

<script>
let arr1=[1,2,3,4]let newarr=arr1.map((x)=>x=x*2)console.log(newarr)
</script>

回调函数——危险危险危险

reduce——返回总值

<script>
let arr1=[1,2,3,4]
let b=arr1.reduce(fuction(x,y){
alert(1)
return x+y
})
console.log(b)
</script>

filter()——创建新的数组

<script>
let arr1=[1,2,3,4]
let b=arr1.filter(function(n){
//console.log(n)
return n%2==0
})
console.log(b)
</script>

对象

存储数据的方式

声明对象——key : value,

<script>
let obj1={
uname:"zhangs",
age:21,
heighr:166,
sing:finction(){
console.log(sing)
}
}
//对象.属性
console.log(obi.uname)
//对象[key]
console.log(obj1["uname"])
obj1.sing("这是对象")
//手动改值——重新赋值
obj1.age=22
console.log(obj1.age)
//遍历对象 for in
for(let i in obj1){
console.log(obj1[i])
}
</script>

http://www.xdnf.cn/news/699.html

相关文章:

  • LicheeRV Nano 与Ubuntu官方risc-v 镜像混合
  • 12【生命周期·入门】为何需要与显式标注 (`‘a`):让编译器读懂引用的“有效期”
  • Oracle--SQL基本语法
  • lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1
  • Eureka搭建
  • BeautifulSoup 库的使用——python爬虫
  • 算法—合并排序—js(场景:大数据且需稳定性)
  • 23种设计模式-结构型模式之装饰器模式(Java版本)
  • C#进阶学习(八)常见的泛型数据结构类(3)SortedDictionary<TKey, TValue>与SortedList<TKey, TValue>
  • 大语言模型推理能力的强化学习现状理解GRPO与近期推理模型研究的新见解
  • PG CTE 递归 SQL 翻译为 达梦版本
  • 将 JSON 字符串转化为对象的详细笔记 (Java示例)
  • 【AI量化第26篇】以配置为核心的工程化研究管理——基于miniQMT的量化交易回测系统开发实记
  • 15. 三数之和
  • 计算机网络中的网络层:架构、功能与重要性
  • llama factory
  • springboot+vue3+mysql+websocket实现的即时通讯软件
  • C++数组栈与链表栈
  • 软考高级系统架构设计师-第16章 数学与经济管理
  • 切换 Python 版本(配置path方式,含trae)
  • 一个最简单的 Model Context Protocol 的例子
  • Halcon应用:相机标定
  • C++入门篇(下)
  • 线性DP:最长上升子序列(可不连续,数组必须连续)
  • Matlab 复合模糊PID
  • NumPy:数值计算基础与高性能数组操作
  • 如何使用人工智能大模型,免费快速写工作总结?
  • Linux基础指令 补充(自用)
  • 【微知】服务器如何获取服务器的SN序列号信息?(dmidecode -t 1)
  • Origin将双Y轴柱状图升级为双向分组柱状图