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

6.函数表达式 - JS

函数表达式

function (someArgs) { someStatements }
function name(someArgs) { someStatements }
(someArgs) => { someStatements }
  1. 函数表达式就是要,在一个表达式中定义一个函数;
  2. 箭头函数也是一个简洁的函数表达式;
  3. 执行完函数表达式,才能开始调用:
    • 一般是立刻调用、用作回调等;
    • 可以赋值给其他变量,使得后续可以继续使用,不能变量提升(先调用后声明)。
  4. 根据语法解构,函数表达式可以分为两类:
    • 箭头函数表达式;
    • 由关键字 function 引导的函数表达式。
g();	// 报错,函数还没有声明
f();	// 报错,函数还没有声明
let f = function g() { console.log('Hi'); }	// =后边的是一个具名函数表达式
f();	// 'Hi'
g();	// 报错,具名函数表达式的名字只能在函数体内部调用

具名函数表达式

具名函数表达式在语法上,多一个名字:

  1. 创建的函数 name 属性就是该名字,不会因为因为赋值而改变;
let g = function f(n) { }
let h = gg.name			// 'f'
h.name			// 'f'(function(){}).name	// '',空字符串,没有名字
let k = function () {}
k.name			// 'k'
  1. 具名函数表达式的名字只能在函数体内部调用,递归的场景可以使用;
let factorial = function fac (n) {if (n <= 1) return 1;else return n * fac(n - 1);	// 不要使用 factorial(n - 1)
}factorial(4)	// 24
fac(4)			// 报错
  1. 注意:不要在函数表达式的函数体内,使用其赋值的变量,这样容易出错。
let factorial = function fac (n) {if (n <= 1) return 1;else return n * factorial(n - 1);
}factorial(4)	// 24let f = factorial;
factorial = 1;
f(4)			// 报错

箭头函数表达式

箭头函数表达式的语法更加简洁,含义上有一些差异,用法上也有一些限制:

  • 箭头函数没有独立的 this
  • 没有 arguments 对象;
  • 不能用作构造函数(使用 new 调用会 报错,无法访问 new.target 关键字);
  • 函数体内不能使用 yield,不能用以创建生成器。

基本语法

  1. 只有一个参数时,() 可以省略;
  2. 函数体只有单个语句,{} 可以省略,返回值就是该语句/表达式的值。
  3. 函数体有多个语句,必须使用 {} 包围。
/* 函数体只有一个语句 */
() => 单个语句
单个参数 => 单个语句
(单个参数) => 单个语句
(参数1, 参数2) => 单个语句
let f = ()=>console.log(111)
f() === undefined		// true/* 函数体有多个语句,使用{} */
() => { 多个语句 }
单个参数 => { 多个语句 }
(单个参数) => { 多个语句 }
(参数1, 参数2) => { 多个语句 }
let g = ()=>{}

注意事项

  1. 语法上,一个对象作为表达式返回时,加 ()
let f = ()=>{ a:1 }			// 不报错,a被当成一个标签,执行了表达式 “1”,返回 undefined
let f = ()=>{ a: 1, b: 2 }	// 报错
let f = ()=>{ a: 1; b: 2 }	// 不报错,a,b都时标签
let f = ()=>( {a:1, b:2} )	// 不报错,()改变了优先级
  1. 注意 this 的指向。更多因此导致的注意事项,见此

相关文章:

6.函数表达式 - JS

函数表达式 function (someArgs) { someStatements } function name(someArgs) { someStatements } (someArgs) > { someStatements }函数表达式就是要&#xff0c;在一个表达式中定义一个函数&#xff1b;箭头函数也是一个简洁的函数表达式&#xff1b;执行完函数表达式&a…...

【RK3288 Android10 C30 支持sim卡拔掉不弹窗,及热插拔】

文章目录 【RK3288 Android10 C30 支持sim卡拔掉不弹窗,及热插拔】需求方案patchframework【RK3288 Android10 C30 支持sim卡拔掉不弹窗,及热插拔】 需求 由于3288 硬件上的sim卡座不支持热插拔,是没有顶针来识别sim卡是否被拔掉的。所以在sim被拔掉或者松动的时候,会弹窗…...

python生成docx文件

使用python自动生成一张想要的docx文件 在这其中有指纹和公司盖章 from PIL import Image from docx import Document from docx.oxml.ns import qn from docx.shared import Pt, Inches, Cm from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from xlsxtpl.writerx import …...

网络异常案例四_IP异常

问题现象 终端设备离线&#xff0c;现场根据设备ip&#xff0c;ping不通。查看路由器。 同一个路由器显示的终端设备&#xff08;走同一个wifi模块接入&#xff09;&#xff0c;包含不同网段的ip。 现场是基于三层的无线漫游&#xff0c;多个路由器wifi配置了相同的ssid信息&a…...

Hack The Box-Challenges-Misc-M0rsarchive

解压压缩包&#xff0c;里面是一张图片和一个新的zip文件 图片放大后的图案是----. 考虑到为莫斯密码&#xff0c;将其解密 密码为9&#xff0c;继续解压缩包 又是一张莫斯密码图加压缩包&#xff0c;写一段脚本去解密图片中的莫斯密码&#xff0c;并自动解压缩包 import re i…...

验证码倒计时:用户界面的小细节,大智慧

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 验证码倒计时&#xff1a;用户界面的小细节&#xff0c;大智慧 前言为什么需要验证码倒计时防止滥用&#xff1a;用户心理&#xff1a; 设计考量可见性&#xff1a;友好性&#xff1a;适应性&#xff…...

Web后端:CSRF攻击及应对方法

CSRF攻击是开发Web后端时需要重点解决的问题。 那么什么是CSRF攻击呢&#xff1f; CSRF跨站点请求伪造(Cross—Site Request Forgery)&#xff0c;其主要利用的是Cookie的一个弱点&#xff0c;就是Cookie 最初被设计成了允许在第三方网站发起的请求中携带&#xff1a; 关于Co…...

【手写数据库toadb】toadb表对象访问操作,存储管理抽象层软件架构设计思想应用

21 表文件访问秘密 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便…...

SpringBoot使用Rabbit详解含完整代码

点击下载《SpringBoot使用Rabbit详解含完整代码》 1. 摘要 本文将详细介绍如何在Spring Boot应用程序中集成和使用RabbitMQ消息队列。RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;用于通过轻量级和可靠的消息在应用程序或系统之间进行异步通信。本文将通过步骤说明…...

深度学习本科课程 实验3 网络优化

一、在多分类任务实验中实现momentum、rmsprop、adam优化器 1.1 任务内容 在手动实现多分类的任务中手动实现三种优化算法&#xff0c;并补全Adam中计算部分的内容在torch.nn实现多分类的任务中使用torch.nn实现各种优化器&#xff0c;并对比其效果 1.2 任务思路及代码 imp…...

Eclipse 安装使用ABAPGit

Eclipse->Help->Install New software 添加地址 https://eclipse.abapgit.org/updatesite/ 安装完成打开 选择abapGit repositories,先添加仓库 点下图添加自己仓库 如图添加仓库地址 添加完仓库后&#xff0c;点击我的仓库 右键选中行&#xff0c;可以进行push和pu…...

std::mutex std::recursive_mutex std::shared_mutex

std::mutex C11。最简单的互斥锁&#xff0c;1个线程内&#xff0c;不支持重复加锁。 std::lock_guard<std::mutex> lock(mutex) std::recursive_mutex C11。可以替代st::mutex&#xff0c;但性能会下降。1个线程内&#xff0c;支持重复加锁&#xff08;可重入&#x…...

vscode的vetur文档格式化失效

如果vscode安装了vetur插件之后&#xff0c;shiftAltF又无法格式化vue文件代码。 解决办法&#xff1a;打开文件 ---> 首选项 ---> 设置&#xff0c;搜索 vetur.format.defaultFormatter.html后将prettier替换勾选为js-beautify-html 注&#xff1a;设置下划线了并可以在…...

idea 快捷键ctrl+shift+f失效的解决方案

文章目录 搜狗输入法快捷键冲突微软输入法快捷键冲突 idea的快捷键ctrlshiftf按了没反应&#xff0c;理论上是快捷键冲突了&#xff0c;检查搜狗输入法和微软输入法快捷键。 搜狗输入法快捷键冲突 不需要简繁切换的快捷键&#xff0c;可以关闭它&#xff0c;或修改快捷键。 微…...

C++面试:数据库的连接池管理

目录 基本概念 工作原理 核心组件 实现机制 优点 缺点 实践建议 实例 场景描述 解决方案&#xff1a;引入数据库连接池 配置数据库连接池 使用连接池 监控和调优 效果 结论 数据库连接池管理是一个在软件开发中常见的优化策略&#xff0c;特别是在需要频繁访问数…...

React Hook之钩子调用规则(不在循环、条件判断或者嵌套函数中调用)

文章目录 React Hook之钩子调用规则&#xff08;不在循环、条件判断或者嵌套函数中调用&#xff09;错误使用案例案例具体解决方法 React Hook之钩子调用规则&#xff08;不在循环、条件判断或者嵌套函数中调用&#xff09; hooks使用规则 只能在函数最外层调用 Hook。不要在…...

深入理解TCP网络协议(3)

目录 1.前言 2.流量控制 2.阻塞控制 3.延时应答 4.捎带应答 5.面向字节流 6.缓冲区 7.粘包问题 8.TCP异常情况 9.小结 1.前言 在前面的博客中,我们重点介绍了TCP协议的一些属性,有连接属性的三次握手和四次挥手,还有保证数据安全的重传机制和确认应答,还有为了提高效率…...

JavaScript实现归并排序及vscode输出乱码解决

思路 归并排序思路&#xff1a;11.6 归并排序 - Hello 算法 总体上来讲就是 递归分解 归并排序 代码如下↓ 代码 //归并排序 function merge(left, right){console.log(flag);console.log(left);console.log(right);let result new Array();let il 0, ir 0;//左右两个数…...

Redis面试题40

人工智能如何影响医疗保健行业&#xff1f; 答&#xff1a;人工智能对医疗保健行业产生了深远的影响&#xff0c;为医疗保健提供了更高效、准确和个性化的服务。以下是一些人工智能在医疗保健领域的应用示例&#xff1a; 疾病诊断&#xff1a;人工智能可以利用机器学习和深度学…...

2024年危险化学品经营单位安全管理人员证考试题库及危险化学品经营单位安全管理人员试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位安全管理人员证考试题库及危险化学品经营单位安全管理人员试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff0…...

Ai2Psd终极指南:如何将Illustrator矢量图层完美导出到Photoshop

Ai2Psd终极指南&#xff1a;如何将Illustrator矢量图层完美导出到Photoshop 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 还在为AI到PSD的格…...

小白友好!YOLO11镜像部署教程:无需独立显卡也能体验目标检测

小白友好&#xff01;YOLO11镜像部署教程&#xff1a;无需独立显卡也能体验目标检测 1. 引言&#xff1a;为什么选择YOLO11镜像 目标检测是计算机视觉中最基础也最实用的技术之一&#xff0c;而YOLO系列算法以其快速高效著称。最新发布的YOLO11在保持实时性的同时&#xff0c…...

如何让AI读懂古文?GuwenBERT带来的古典汉语处理革命

如何让AI读懂古文&#xff1f;GuwenBERT带来的古典汉语处理革命 【免费下载链接】guwenbert GuwenBERT: 古文预训练语言模型&#xff08;古文BERT&#xff09; A Pre-trained Language Model for Classical Chinese (Literary Chinese) 项目地址: https://gitcode.com/gh_mir…...

图卷积网络代码规范:PyGCN项目Python风格与最佳实践终极指南

图卷积网络代码规范&#xff1a;PyGCN项目Python风格与最佳实践终极指南 【免费下载链接】pygcn Graph Convolutional Networks in PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pygcn 图卷积网络&#xff08;Graph Convolutional Networks, GCN&#xff09;是…...

开源抢票工具成功率提升指南:从配置到实战的全方位优化

开源抢票工具成功率提升指南&#xff1a;从配置到实战的全方位优化 【免费下载链接】damaihelper 支持大麦网&#xff0c;淘票票、缤玩岛等多个平台&#xff0c;演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 你是否曾在开票瞬间眼睁睁…...

CasRel关系抽取完整流程:从原始文本清洗、NER预处理到SPO抽取

CasRel关系抽取完整流程&#xff1a;从原始文本清洗、NER预处理到SPO抽取 1. 什么是CasRel关系抽取&#xff1f; CasRel&#xff08;Cascade Binary Tagging Framework&#xff09;是一个专门从文本中自动提取"谁-做了什么-对谁"这种关系信息的AI模型。想象一下&am…...

免费开源字体 Source Sans 3 完整配置使用教程

免费开源字体 Source Sans 3 完整配置使用教程 【免费下载链接】source-sans Sans serif font family for user interface environments 项目地址: https://gitcode.com/gh_mirrors/so/source-sans Source Sans 3 是由 Adobe 开发的开源无衬线字体家族&#xff0c;专为现…...

OpenClaw浏览器自动化:千问3.5-9B实现智能爬虫

OpenClaw浏览器自动化&#xff1a;千问3.5-9B实现智能爬虫 1. 为什么需要智能爬虫&#xff1f; 去年我接手了一个市场调研项目&#xff0c;需要从200多个电商页面提取商品信息和用户评价。传统爬虫遇到三个致命问题&#xff1a;动态加载内容抓取不全、验证码频繁拦截、非结构…...

光通信行业彻底爆了!三项世界纪录背后藏着多少财富密码

在6G尚未正式投入商业应用之际&#xff0c;我国的科研工作者已然悄然斩获了三项世界纪录&#xff1f;于此同时&#xff0c;全球范围内的人工智能领域的大型企业正大肆投入资金用于提升算力&#xff0c;进而直接促使光模块市场变得异常火爆。这背后所蕴含的不仅仅是技术层面的突…...

无障碍技术实践:OpenClaw+Phi-3-vision-128k-instruct构建语音图文助手

无障碍技术实践&#xff1a;OpenClawPhi-3-vision-128k-instruct构建语音图文助手 1. 项目背景与动机 去年夏天&#xff0c;我在一次志愿者活动中遇到几位视障开发者。他们提到日常工作中最大的障碍不是编程本身&#xff0c;而是无法快速获取图像信息和处理文档内容。这让我开…...