【JS基础】1.函数、匿名函数、回调函数、IIFE(立即执行函数)

【JS基础】1.函数、匿名函数、回调函数、IIFE(立即执行函数)

1. 认识函数

  • 函数到底是什么?
    • 函数其实就是某段代码的封装,这段代码帮助我们完成某一下功能
    • JS引擎中有一些已经提供的函数
    • 我们也可以编写属于自己的函数
  • 函数使用的步骤
    • 声明函数:封装成独立的功能快
    • 调用函数:享受封装的成果

2. 声明函数和调用函数

  • 使用function关键字
function foo() {
  console.log('这是函数声明')
}
  • 函数的返回值
    • 使用return来返回结果
    • 如果函数没有返回语句,会有默认的返回值undefined
    • 如果有return语句,但没有返回任何东西,返回值为undefined
    • return语句后面的代码不会执行
  • arguments参数
    • 默认情况下,arguments对象是所有(非箭头)函数中可用的局部变量
    • arguments是一个object类型(array-like)伪数组
function bar() {
  console.log(arguments)
  // [Arguments] { '0': 1, '1': 2, '2': '测试', '3': { name: '张三' } }
}

bar(1, 2, '测试', { name: '张三' })

3. 函数表达式

  • 函数表达式的写法
// 函数表达式的写法
var baz = function () {
  console.log('这是用函数表达式创建的函数')
}
  • 在JS中函数只是一种特殊的值

  • 无论函数是怎么创建的,都是一种特殊的值

  • 函数表达式和函数声明的区别

    • 函数表达式是在代码到达执行的时候创建
    • 函数声明在被定义之前就可以使用

4. JavaScript头等函数

  • 头等函数,指函数可以作为函数的参数、返回值、赋值给变量、或者存储在数据结构中
  • 通常对头等公民的变成方式,称之为函数式变成
// 定义一个函数
function foo() {
  console.log('这是函数foo内部')
  function fooSon() {
    console.log('这是foo的子函数')
  }
  return fooSon
}

var bar = function (fn) {
  console.log(`这是函数bar`)
  return fn()
}

// 函数可以赋值给变量
var baz = foo

// 将函数baz已参数的形式传递给bar
bar(baz)
// 这是函数bar
// 这是函数foo内部

// 调用foo函数
console.log('调用foo')
var returnFun = foo()
returnFun()

// 函数可以存储在数据结构中
var obj = {
  name: '张三',
  age: 18,
  goBack: function (params) {
    console.log('我能返回')
  }
}

5. 回调函数

  • 我们可以将一个函数传递给函数
function foo(type, callback) {
  console.log(`这是传递的参数${type}`)
  setTimeout(function () {
    console.log('foo函数处理type中')
    type++
    callback(type)
  }, 2000)
}

// 显然 foo是一个异步函数,如果我们需要获取最后的type值
// 获取foo处理过的type
function getFooType(type) {
  console.log(`获取到了type${type}`)
}

foo(66, getFooType)
// 这是传递的参数66
// foo函数处理type中
// 获取到了type67
  • 当然,我们也可以改造成匿名函数更方便使用
function foo(type, callback) {
  console.log(`这是传递的参数${type}`)
  setTimeout(function () {
    console.log('foo函数处理type中')
    type++
    callback(type)
  }, 2000)
}

// 显然 foo是一个异步函数,如果我们需要获取最后的type值
foo(66, function (res) {
  console.log(`获取的返回值${res}`)
})
// 这是传递的参数66
// foo函数处理type中
// 获取的返回值67

6 立即执行函数

  • 立即执行函数IIFE立即调用函数表达式
  • 立即执行函数会创建一个独立的上下文,避免外界访问和修改内部的变量
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>

<script>
  var btns = document.querySelectorAll('button')
  for (var i = 0; i < btns.length; i++) {
    btns[i].addEventListener('click', function () {
      console.log(`点击了第${i}个button`)
    })
  }
</script>

显然,在上面的代码中,由于使用var来声明的i,每次点击后得到的i都是4,我们利用立即执行函数改造一下

var btns = document.querySelectorAll('button')
for (var i = 0; i < btns.length; i++) {
  ;(function (i) {
    btns[i].addEventListener('click', function () {
      console.log(`点击了第${i + 1}个button`)
    })
  })(i)
}

立即执行函数,可以有入参,返回值

  • 立即执行函数的其他写法
// 常规写法
var result = (function (text) {
  var result = {
    name: '张三',
    age: 18,
    action: foo
  }

  function foo() {
    console.log(`匿名函数里面的函数`)
  }
  console.log(`这是定义的匿名函数`)
  console.log(`接收到的参数${text}`)

  return result
})('这是形参')
result.action()


// 表达式写法 + -都是表达式,函数也是一个特殊的值
+function foo(){}()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt图片等资源管理

Qt的图片等资源管理通常有两种方式 1&#xff0c;直接将图标和一些配置文件打包在可执行程序中 添加qrc文件&#xff0c;可使用qtcreator直接添加 右键选中工程 点击选择即可。 然后添加文件。我这个例子是添加了Image文件夹下的图片资源 使用的时候&#xff0c;可以在代码…

Oracle Analytics BIEE 操作方法(六)数据格式1:百分比

问题&#xff1a; 有如下公式&#xff0c;将数据显示为按行的百分比。此时数据显示只会有一位小数。想显示两位 解决方案 在分析中找到“高级”标签&#xff0c;将“分析XML”中内容复制出来 替换 将&#xff1a;minDigits“1” maxDigits“1” 替换为&#xff1a;minDigits…

在线HTML编辑器源码

在线HTML编辑器源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>在线HTML编辑器</title><meta name"viewport" content"…

10年交易Anzo Capital昂首资本才发现的适合孕线的止损

拥有10年交易经验的投资者才发现的一种止损方法&#xff0c;那就是Inside-bar孕线止损&#xff0c;有些投资者就有疑问了&#xff0c;止损能明白&#xff0c;但是什么是Inside-bar孕线?其实很简单&#xff0c;Anzo Capital昂首资本就先做个知识普及&#xff1a; inside-bar就…

一文读懂VR数字展览会,从沉浸式体验到市场竞争力的全方位提升

在数字化转型的浪潮中&#xff0c;VR技术正逐渐成为商业展览的新趋势。VR数字展览会通过创新的展示功能和互动体验&#xff0c;为参展商和观众带来前所未有的便利和效果。 一、VR展示功能的沉浸式体验 1、全方位沉浸式体验&#xff1a; VR技术能够创造一个全方位的三维展览环…

备考2024年上海初中生古诗文大会:单选题真题示例和独家解析

上海市中小学生的初中生古诗文大会——即上海中学生古诗文大会&#xff08;初中组&#xff09;和小学生古诗文大会&#xff08;比赛&#xff09;相比&#xff0c;除了题型更丰富之外&#xff0c;最主要的是考察的内容深度和广度不同。初中的题目中对于文言文的考察大幅增加&…

vue3+node.js+mysql+ant design实现表格的查询功能

今日主要分享如何运用vue、nodejs、mysql及ant design构建表格数据查询功能&#xff0c;这也是众多项目开发者关注的问题。最关键在于前端与后端的协作&#xff0c;后端数据则通过nodejs编写。尽管涉及多项技术&#xff0c;看似复杂&#xff0c;但实际操作却并非困难。当然&…

【Harmony3.1/4.0】笔记六-对话框

概念 对话框在任何一款应用中&#xff0c;任何一个系统或者平台上使用都非常频繁&#xff0c;这里介绍一下鸿蒙系统中对话框的用法&#xff0c;分别为:普通文本对话框&#xff0c;自定义提示对话框&#xff0c;对话框菜单&#xff0c;警告提示对话框&#xff0c;列表选择对话框…

数据链路层(计算机网络,待完善)

0、前言 本文大多数图片都来自于 B站UP主&#xff1a;湖科大教书匠 的教学视频&#xff0c;对高军老师及其团队制作出这么优质的课程表示感谢。文章增加了部分个人理解&#xff0c;内容并不是对视频的静态化翻译。 1、概述 1.1、数据链路层在计算机网络体系中的位置 1.2、对…

第58篇:创建Nios II工程之Hello_World<四>

Q&#xff1a;最后我们在DE2-115开发板上演示运行Hello_World程序。 A&#xff1a;先烧录编译Quartus硬件工程时生成的.sof文件&#xff0c;在FPGA上成功配置Nios II系统&#xff1b;然后在Nios II Eclipse窗口右键点击工程名hello_world&#xff0c;选择Run As-->Nios II …

离线语音模块初步学习——LSYT201B(深圳雷龙发展)

一 、产品简介 首先简单介绍下该离线语音模块&#xff0c;官方给出的介绍是&#xff1a;YT2228 是根据智能语音交互市场需求及思必驰算法的发展方向定义开发的 “芯片算法”人工智能人机语音交互解决方案&#xff0c;具有高性能、低功耗等特点。该芯片通过软硬融合的方法&…

搭建web服务器需要哪些步骤?

首先跟大家简单普及一下什么是web服务器&#xff1f; Web服务器也称为WWW(WORLD WIDE WEB)服务器&#xff0c;一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序。WEB服务器主要功能是提供网上信息浏览服务&#xff0c;可以处理浏览器等Web客户端的请求并返…

婴儿洗衣机有必要买吗?四款好评婴儿洗衣机性能大对比

由于宝宝的日常衣物是经常需要换洗的&#xff0c;而且有时候一天好几套衣服&#xff0c;遇上尿湿了、吐奶了&#xff0c;换洗就更勤。每次一点点衣物就放进家庭用的大容积洗衣机清洗&#xff0c;会相对的比较容易耗水耗电。而如果把宝宝的换洗衣物堆积一阵子&#xff0c;汇总了…

重磅!!!监控分布式NVIDIA-GPU状态

简介&#xff1a;Uptime Kuma是一个易于使用的自托管监控工具&#xff0c;它的界面干净简洁&#xff0c;部署和使用都非常方便&#xff0c;用来监控GPU是否在占用&#xff0c;非常美观。 历史攻略&#xff1a; docker应用&#xff1a;搭建uptime-kuma监控站点 win下持续观察…

VSCODE自定义代码片段简述与基础使用

目录 一、 简述二 、 基础使用说明2.1 新建一个代码块工作区间2.2 语法 三、 示例四、 参考链接 一、 简述 VSCode的自定义代码片段功能允许开发者根据自己的需求定义和使用自己的代码片段&#xff0c;从而提高编码效率。 优点: 提高效率&#xff1a; 自定义代码片段能够减少…

08 内核开发-避免冲突和死锁-mutex

08 内核开发-避免冲突和死锁-mutex 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中。 …

JAVA实现easyExcel模版导出

easyExcel文档 模板注意&#xff1a; 用 {} 来表示你要用的变量 &#xff0c;如果本来就有"{“,”}" &#xff0c;特殊字符用"{“,”}"代替{} 代表普通变量{.}代表是list的变量 添加pom依赖 <dependency><groupId>com.alibaba</groupId&g…

记一次数据查询问题

背景: 有一个数据表,适用原始查询就能查到数据 select * from t_easy_barcode where FP01 = panel_jitaix32_2024_04_25_10_29_57 当我把表中数据列重命名之后sql如下: 因此 我先统计了一下数据表中数据有多少,查询发现有 2482872条 因此首先想到的问题是查询一…

【机器学习】特征筛选实例与代码详解

机器学习中的特征筛选 一、特征筛选的重要性与基本概念二、特征筛选的方法与实践1. 基于统计的特征筛选2. 基于模型的特征筛选3. 嵌入式特征筛选 三、总结与展望 在机器学习领域&#xff0c;特征筛选作为预处理步骤&#xff0c;对于提高模型性能、简化模型结构以及增强模型解释…

是时候了解替代FTP传文件的最优传输方案了

目前越来越多的企业在寻找替代FTP传文件的方案&#xff0c;主要原因在于其固有的一些弊端&#xff0c;在现代企业数据传输需求中可能导致安全性、效率和可靠性方面的问题。以下是FTP的一些主要弊端&#xff1a; 1.数据传输不加密&#xff1a;FTP在传输过程中不加密数据&#xf…
最新文章