[JavaScript] 探索JS中的函数秘密

news/2025/1/15 19:37:02/

函数长啥样?

把一些要重复使用的内容封装到函数内。

function foo(title) {console.log(title)
}
foo('title')
foo('dust')
foo('hello')

运行结果:
在这里插入图片描述

用对象把函数装起来

let user = {name: null,setUsername: function (name) {this.name = name},getUsername: function () {return this.name},
}
user.setUsername('dust')
console.log(user.getUsername())

运行结果:
在这里插入图片描述
简写的形式:

let user = {name: null,setUsername(name) {this.name = name},getUsername() {return this.name},
}

匿名函数与函数提升

  • 没名字的函数:匿名函数
  • 匿名函数是不会提升的,在函数前执行是不行的~
let foo = function () {console.log('hello')
}
  • 有名字的函数:具名函数
  • 虽然程序是从上到下解析的,但是它函数提升啦!
  • 变量提升:你把它想象在全文最上方就好。
  • 所以可以正常执行
show()
function show() {console.log('show')
}

运行结果:
在这里插入图片描述

箭头函数

function sum(...args) {return args.reduce((a, b) => {return a + b})
}
console.log(sum(1, 2, 3, 4, 5))

运行结果:
在这里插入图片描述

形参和实参

function sum(a, b, c) {//这里是形参console.log(c)return a + b
}
console.log(sum(1, 2)) //这里是实参

运行结果:
在这里插入图片描述

  • 当实参多了的时候,会被忽略。
  • 当形参多了的时候,会被定义但未赋值,所以是undefined

默认参数

  • 解决实参缺少的问题
function sum2(a, b = 1) {return a + b
}
console.log(sum2(1))

运行结果:
在这里插入图片描述

函数作为参数

  • 以setInterval为例
let i = 0
setInterval(() => {console.log(++i)
}, 1000)

功能:每秒输出+1的数
运行结果:
在这里插入图片描述

Arguments的使用

  • 在js中,传入的参数可以在Arguments中看见(这点非常有意思喔)
function getSum(...args) {console.log(arguments)return args.reduce((a, b) => a + b)
}
console.log(getSum(1, 2, 3, 4, 5))

运行结果:
在这里插入图片描述

回调函数

  • test.html
  • 回调函数在DOM操作里的体现
  • 回调函数是一个函数在参数里,就是在其他函数里又调用了一个函数
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><button id="bt">hello</button></body><script>document.getElementById('bt').addEventListener('click', function () {alert(this.innerHTML)})</script>
</html>

在这里插入图片描述

this指针的改变

在map()里通过传入this以改变this的指向
不传入this的情况:

let Lesson = {site: 'hd',lists: ['js', 'css', 'mysql'],show: function () {return this.lists.map(function (value) {return `${this.site}-${value}`})},
}
console.log(Lesson.show())

运行结果:
在这里插入图片描述
由于没有传入外部的this,在lists里没有site这个属性,所以是undefined
如果我们传入this:

let Lesson = {site: 'hd',lists: ['js', 'css', 'mysql'],show: function () {return this.lists.map(function (value) {return `${this.site}-${value}`}, this)},
}
console.log(Lesson.show())

运行结果:
在这里插入图片描述
就成功将this指针指向了Lesson里的内容。


http://www.ppmy.cn/news/607452.html

相关文章

数据湖(二十):Flink兼容Iceberg目前不足和Iceberg与Hudi对比

文章目录 Flink兼容Iceberg目前不足和Iceberg与Hudi对比 一、Flink兼容Iceberg目前不足 二、Iceberg与Hudi对比 Flink兼容Iceberg目前不足和Iceberg与Hudi对比

MLIR中间表示与编译

MLIR中间表示与编译 概述 目前深度模型的推理引擎按照实现方式大体分为两类&#xff1a; 解释型推理引擎&#xff1a;  一般包含模型解析器&#xff0c;模型解释器&#xff0c;模型优化器。  模型解析器负责读取和解析模型文件&#xff0c;转换为适用于解释器处理的内存格…

客快物流大数据项目(六十九):即席查询的背景介绍和业务处理流程

文章目录 即席查询的背景介绍和业务处理流程 一、​​​​​​​背景介绍

大数据必学Java基础(三十四):面向对象内存分析

文章目录 面向对象内存分析 一、分析代码1 二、分析代码2 三、分析代码3 面向对象内存分析</

固态硬盘与QLC闪存

固态硬盘与QLC闪存 致钛系列消费级固态硬盘 以极“致”产品定义闪存科技新“钛”度 长江存储致钛系列两款消费级固态硬盘(SSD)新品&#xff0c;分别为PCIe接口PC005 Active和SATA接口SC001 Active&#xff0c;兼具性能和品质。 “致钛产品的优势主要体现在对传统闪存技术的创…

[JS] 事件冒泡,阻止事件冒泡,事件的三个阶段(捕获,目标,冒泡)

事件冒泡 添加三个套在一起的div元素&#xff0c;在最里面放一个button&#xff0c;感受事件触发时从里到外“冒泡”的过程。给每个div都加一个事件&#xff1a;点击时就alerttest.html <!DOCTYPE html> <html lang"en"><head><meta charset&…

重卡自动驾驶技术

重卡自动驾驶技术 图森未来成立于2015年&#xff0c;是一家无人驾驶技术企业&#xff0c;专注于为长途重卡开发L4级别无人驾驶解决方案&#xff0c;其业务分布于中国、美国、日本和欧洲。图森未来自主研发的无人驾驶卡车技术使卡车的感知距离长达1000米&#xff0c;持续运行几乎…

云原生(三十六) | Kubernetes篇之Harbor入门和安装

文章目录 Harbor入门和安装 一、入门 1、简介 2、核心组件 3、安装