JavaScript函数进阶学习

文章目录

  • JavaScript函数进阶
    • 函数提升
      • 作用流程
    • 函数参数
      • 动态参数
      • 剩余参数
      • 展开运算符
    • 箭头函数
      • 基本语法
      • 箭头函数参数
      • 箭头函数的this
    • 遍历数组的forEach方法
      • 语法


JavaScript函数进阶

函数提升

函数有时可以先调用再声明。

作用流程

函数提升的作用流程与变量提升类似:

  1. JavaScript会把所有函数声明提升到当前作用域的最前面。
  2. 只会提升函数声明,不提升函数调用。

注意:函数表达式必须先声明和赋值,后调用,否则报错。

bar() // 报错
var bar = function(){console.log('函数表达式不存在提升现象')
}

函数参数

了解函数的使用细节,提升函数应用的灵活度。

学习路径:

  1. 动态参数
  2. 剩余参数

动态参数

arguments是函数内部设置的伪数组变量,它包含了调用函数时传入的所有实参。

function print(){console.log(argument)
}
print(1,2,3,4) // 打印1,2,3,4

总结:

  1. arguments是一个伪数组,只存在于函数中。
  2. arguments的作用是动态获取函数的实参。
  3. 可以通过for循环依次得到传递过来的实参。

剩余参数

剩余参数允许我们将一个不定数量的参数表示伪一个数组,在函数内部中使用。

function getsum(...other){console.log(other) // other得到[1,2,3]
}
getsum(1,2,3)

与动态参数的区别:

  1. …是语法符号,置于最末函数形参之前,用于获取多余的实参
  2. 借助…获取的剩余实参是个真数组
function print(a,b,...other){console.log(a) // 获得1console.log(b) // 获得2console.log(other) // 获得3,4
}
print(1,2,3,4)

展开运算符

展开运算符(…)可以将一个数组展开,在数组中使用。

const arr = [1,2,3,4,5]
console.log(...arr) // 1 2 3 4 5

说明:

  1. 不会修改原数组

应用场景:求数组最大值(最小值)、合并数组等。

// 求数组最大值和最小值
const arr = [1,2,3,4,5]
console.log(Math.max(...arr)) // 5
console.log(Math.min(...arr)) // 1
// 合并数组
const arr1 = [1,2,3]
const arr2 = [4,5,6]
const arr = [...arr1,...arr2]
console.log(arr) // [1,2,3,4,5,6]

箭头函数

引入箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁。

使用场景:箭头函数更适用于那些本来需要匿名函数的地方。

基本语法

const fn = (形参) =>{//函数主体
}
fn() // 调用

如果只有一个形参,小括号可以省略:

const fn = x =>{console.log(x)
}
fn(1) // 调用

只有一行代码时,可以省略大括号:

const fn = x => console.log(x)
fn(1) // 调用

只有一行代码,无需写return直接返回返回值:

const fn = x => x + 1
console.log(fn(1)) // 2

加括号的函数体返回对象字面表达量:

const fn = uname => ({uname: uname}) // 对象要用小括号包起来
console.log(fn('abc')) // 直接返回一个对象 {uname: 'abc'}

箭头函数参数

箭头函数没有arguments参数,但是有剩余参数。

const getSum = (...arg) => {let sum = 0for(let i = 0; i < arg.length; i++){sum += arg[i]}return sum
}
console.log(getSum(1,2,3)) // 6

箭头函数的this

以前this的指向:谁调用这个函数,this就指向谁。

console.log(this) // window
function fn(){console.log(this) // window
}
fn() // = window.fn()
const obj = {name: 'lily',sayhi: function (){console.log(this) // obj}
}
obj.sayhi() // 调用

在箭头函数出现之前,每一个新函数根据它是被如何调用的来定义这个函数的this值。

箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this。

const fn = function(){let fun = () => {console.log(this) // fn}
}
fn()

对象方法箭头函数的this:

// 对象方法箭头函数的this
const obj = {uname: 'lily',sayhi: () => {console.log(this) // window}
}
obj.sayhi()
const obj = {uname: 'lily',sayhi: function () { // function的this指向objlet i = 10const count = () => {console.log(this) // obj}count()}
}
obj.sayhi()

遍历数组的forEach方法

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

主要使用场景:遍历数组的每个元素

语法

被遍历的数组.forEach(function(当前数组元素, 当前元素索引号){// 函数体
})

注意:

  • forEach主要是遍历数组。
  • 参数是当前数组元素,是必写的,索引号是可选的。

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

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

相关文章

移动端框架:加速移动应用开发与提升跨平台兼容性

在当今快速发展的移动应用领域&#xff0c;开发者们面临着如何快速构建、维护并发布跨平台应用的挑战。为了应对这一挑战&#xff0c;移动端框架应运而生&#xff0c;它们不仅加速了移动应用的开发流程&#xff0c;还提升了应用的跨平台兼容性&#xff0c;并确保了应用性能与原…

C++的算法:动态规划算法

动态规划(Dynamic Programming,简称DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。 动态规划的基本步骤: 1. 描述问题的最优解的结构:确定问题的…

2024/6/2 英语每日一段

However, they denied Hirst had been deliberately misleading, arguing that it was his “usual practice” to date physical works in a conceptual art project with the date of the project’s conception, which in the case of The Currency was 2016. Hirst and Sci…

Python | 自动探索性数据分析(EDA)库SweetViz

SweetViz是一个开放源代码Python库&#xff0c;主要用于生成精美的高密度可视化文件&#xff0c;启动探索性数据分析&#xff08;EDA&#xff09;&#xff0c;输出为完全独立的HTML应用程序。 探索性数据分析&#xff08;EDA&#xff09;是分析和总结数据集主要特征的过程&…

uni-app(优医咨询)项目实战 - 第7天

学习目标&#xff1a; 能够基于 WebSocket 完成问诊全流程 能够使用 uniCloud 云存储上传文件 能够完成查看电子处方的功能 能够完成医生评价的功能 一、问诊室 以对话聊天的方式向医生介绍病情并获取诊断方案&#xff0c;聊天的内容支持文字和图片两种形式。 首先新建一…

AOP案例

黑马程序员JavaWeb开发教程 文章目录 一、案例1.1 案例1.2 步骤1.2.1 准备1.2.2 编码 一、案例 1.1 案例 将之前案例中增、删、改相关节后的操作日志记录到数据库表中。 操作日志&#xff1a;日志信息包含&#xff1a;操作人、操作时间、执行方法的全类名、执行方法名、方法…

网关(Gateway)- 内置过滤器工厂

官方文档:Spring Cloud Gateway 内置过滤器工厂 AddRequestHeaderGatewayFilterFactory 为请求添加Header Header的名称及值 配置说明 server:port: 8088 spring:application:name: api-gatewaycloud:nacos:discovery:server-addr: 127.0.0.1:8847username: nacospassword: …

Java中的垃圾回收机制详解

一、技术难点 Java中的垃圾回收机制&#xff08;Garbage Collection, GC&#xff09;是Java语言的一个核心特性&#xff0c;它负责自动管理堆内存中的对象&#xff0c;自动回收不再使用的对象占用的内存空间&#xff0c;从而避免了C/C等语言中常见的内存泄漏和野指针问题。然而…

52.WEB渗透测试-信息收集-CDN识别绕过(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;51.WEB渗透测试-信息收集-CDN识别绕过&#xff08;4&#xff09; 端口扫描其他内容参考&…

几何裁剪技术在AI去衣应用中的革新作用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域的应用也日益广泛。特别是在AI去衣技术中&#xff0c;几何裁剪技术扮演着至关重要的角色。本文将深入探讨几何裁剪技术在AI去衣中的应用及其带来的影响。 一、几何裁剪技术概述 几何裁剪技术是一种基…

容器技术的发展与影响

一、引言 容器技术近年来在软件开发和运维领域引起了广泛关注。本文将探讨容器技术的发展历程、其在技术领域的应用及其深远影响。 二、容器技术的发展历程 1.1 初期的容器技术 容器技术并非新概念&#xff0c;其历史可以追溯到Unix操作系统。早在20世纪70年代&#xff0c;…

【线性表】顺序存储和链式存储的实现

文章目录 顺序存储链式存储单向链表循环链表 线性表的定义 (1)概念定义&#xff1a;用数据元素的有限序列表示叫做线性表&#xff1b;线性表中数据元素的类型可以为简单类型&#xff0c;也可以为复杂类型。许多实际应用问题所涉的基本操作有很大相似性&#xff0c;不应为每个具…

DALL-2E是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?

1.DALL-2E是什么&#xff1f; DALL-2E 是一个智能对话生成模型&#xff0c;其全称为Diverse All-round Language Generation for Effective Conversation。该模型是由微软研究院于2022年开发的&#xff0c;目的是为了提高对话生成系统在多样性和全面性方面的表现。 DALL-2E 基…

建模杂谈系列244 TimeTraveller

说明 所有的基于时间处理和运行的程序将以同样的节奏同步和执行 TT(TimeTraveller)是一个新的设计&#xff0c;它最初会服务与量化过程的大量任务管理&#xff1a;分散开发、协同运行。但是很显然&#xff0c;TT的功能将远不止于此&#xff0c;它将服务大量的&#xff0c;基于时…

【四大组件】-- 内容提供器 ContentProvider

目录 内容提供器 ContentProvider定义&#xff0c;是什么作用&#xff0c;为什么原理&#xff0c;机制使用方法统一资源标识符 URIMIMEUriMatcherContentUrisContentProviderContentResolver监听数据变化 总结面试问题 内容提供器 ContentProvider Android ContentProvider 基…

【spring】第二篇 bean实例化

对象已经能交给Spring的IOC容器来创建了&#xff0c;但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程&#xff0c;在这块内容中主要解决两部分内容&#xff0c;分别是 bean是如何创建的 实例化bean的三种方式&#xff0c;构造方法,静态工厂和实例工厂 在讲解这…

Linux C/C++时间操作

C11提供了操作时间的库chrono库&#xff0c;从语言级别提供了支持chrono库屏蔽了时间操作的很多细节&#xff0c;简化了时间操作 Unix操作系统根据计算机产生的年代把1970年1月1日作为UNIX的纪元时间&#xff0c;1970年1月1日是时间的中间点&#xff0c;将从1970年1月1日起经过…

WPF -> MVVM

1.1安装MVV MLight 打开 Visual Studio 2022。 在顶部菜单栏中选择“工具” -> “NuGet 包管理器” -> “程序包管理器控制台”。 在控制台中输入以下命令&#xff0c;并按回车键运行&#xff1a; Install-Package MvvmLightLibsStd104.等待安装完成后&#xff0c;你就…

十_信号13 - abort()

abort() 1 首先进程不能忽略 SIGABRT信号 2 要么在 SIGABRT信号的处理函数中 清理缓冲区并自己退出进程。如果信号处理函数中没有执行退出进程操作&#xff0c;返回到 abort()函数中&#xff0c;要求在 abort()函数中结束进程&#xff0c;不能返回到其调用者

数据库(17)——DCL数据控制语言

DCL DCL是Data Control Language数据控制语言&#xff0c;用来管理数据库用户、控制数据库的访问权限。 DCL-管理用户 语法 1.查询用户 USE mysql; SELECT * FROM user; 也可以直接在datagrip找到user表 我们要操作用户要通过User和Host同时定位。Host表示当前用户只能在哪个…