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

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主要是遍历数组。
  • 参数是当前数组元素,是必写的,索引号是可选的。

相关文章:

  • 0基础认识C语言(理论知识)
  • 算法课程笔记——计数原理
  • 直流电机工作原理与控制电路解析
  • 汇编原理(三)编程
  • Android bw_costly_<iface>链
  • TypeScript算法每日一题:两数之和(1)
  • 计算机网络介绍
  • 09Linux GDB学习笔记
  • ctfshow jwt web入门
  • 【前端】vue+element项目中select下拉框label想要显示多个值多个字段
  • 自然语言处理(NLP)—— 神经网络语言处理
  • NPN与PNP的基础知识介绍
  • 使用git将本地文件上传到仓库+git常用指令
  • 二、Nginx目录结构与基本运行原理
  • SpringBoot:手动创建应用
  • Angular 4.x 动态创建组件
  • JDK 6和JDK 7中的substring()方法
  • Less 日常用法
  • Vue小说阅读器(仿追书神器)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 开发基于以太坊智能合约的DApp
  • 聊聊directory traversal attack
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • C# - 为值类型重定义相等性
  • 数据可视化之下发图实践
  • ​【已解决】npm install​卡主不动的情况
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (04)odoo视图操作
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (4) PIVOT 和 UPIVOT 的使用
  • (搬运以学习)flask 上下文的实现
  • (第一天)包装对象、作用域、创建对象
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (六)Hibernate的二级缓存
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)人的集合论——移山之道
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .NET Core中的去虚
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET建议使用的大小写命名原则
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 数据结构 - C++] AVL树原理及实现
  • [2016.7.Test1] T1 三进制异或
  • [20161101]rman备份与数据文件变化7.txt
  • [AAuto]给百宝箱增加娱乐功能
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [BIZ] - 1.金融交易系统特点
  • [C++]类和对象【上篇】