详解JavaScript的函数

详解 JavaScript 的函数

e2c6aa3ef7f429

函数的语法格式

创建函数/函数声明/函数定义

function 函数名(形参列表) { 
	函数体   
	return 返回值; // return 语句可省略
} 

函数调用

函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值

示例代码

//定义的没有参数列表,也没有返回值的一个函数
function hello() {
    console.log("hello")
}
//定义一个有参数列表,有返回值的一个函数
function hello2(num, name) {
    console.log(num + " hello " + name)
    return 1;
}
//hello()
let a = helllo()
console.log(typeof(a))
let b = hello2(1, "小明")
console.log(typeof(b))

注意:

  • let a = helllo() // 该函数没有返回对应的数据,此时a的类型是undefined
  • 在JS中,对一个函数不用去声明它的返回类型,它的返回值类型取决于它return的数据类型(这一点恰巧验证了JS是一个动态语言的特性)

运行结果

image-20240302210841755



函数的参数个数

在JS中调用一个函数的时候,它的实参和形参之间的个数可以不一样
注:实际开发一般要求形参和实参个数要匹配

如果实参个数比形参个数少, 则此时多出来的形参值为 undefined;
如果实参个数比形参个数多, 则多出的参数不参与函数运算;

示例代码

function hello2(num, name) {
    console.log(num + " hello " + name)
    return 1;
}
hello2()
hello2(1,"小明",3)

运行结果
image-20240302214733598



函数表达式

把这个函数直接赋值给一个变量,通过调用这个变量来完成函数的调用,函数的另外一种定义方式
注:JS中,函数是一等公民, 可以用变量保存, 也可以作为其他函数的参数或者返回值

示例代码

let result = function Sum() {
    // 计算1~100之间的和
    ret = 0;
    for(i = 0; i <= 100; i++) {
        ret += i;
    }
    return ret
}
console.log(result())

运行结果
image-20240302220437980


2.还可以使用匿名函数,省略函数名

示例代码

let b = function() {
    console.log(arguments)// 打印调用的参数列表
} 
b();
b(1,2,3);

运行结果
image-20240302221236497



作用域

某个标识符名字在代码中的有效范围,作用域主要分成以下两个:

  • 全局作用域: 在整个script标签中, 或者单独的 js 文件中生效
  • 局部作用域: 在函数内部生效

示例代码

let num = 10;// 全局变量
function test01() {
    let num = 100;// 局部变量
    console.log(num)
}
function test02() {
    let num = 200;// 局部变量
    console.log(num)
}
console.log(num)
test01()
test02()

运行结果
image-20240302222221072


2.在JS中,如果定义一个变量不使用letvar,此时这个变量就变成一个全局变量

示例代码

for(i = 1; i <= 100; i++) {
            
}
console.log(i)

运行结果
image-20240302222745158



作用域链

函数可以定义在函数内部,内部函数可以访问外部函数的变量,采取的是链式查找的方式,从内到外依次进行查找

示例1:

let num = 10
function test01() {
    let num = 100
    //100
    console.log(num)
    function test02() {
        let num = 200;
        //200
        console.log(num)
    }
    test02()
}
test01()

运行结果
image-20240302223551479


示例2:

let num = 10
function test01() {
    let num = 100
    //100
    console.log(num)
    function test02() {
        //let num = 200;
        //100
        console.log(num)
    }
    test02()
}
test01()

运行结果
image-20240302224207499


示例3:

let num = 10
function test01() {
    // let num = 100
    //10
    console.log(num)
    function test02() {
        //let num = 200;
        //10
        console.log(num)
    }
    test02()
}
test01()

运行结果
image-20240302224439223


示例4:

//let num = 10
function test01() {
    // let num = 100
    //10
    console.log(num)
    function test02() {
        //let num = 200;
        //10
        console.log(num)
    }
    test02()
}
test01()

运行结果

image-20240302224747276

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

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

相关文章

5个好玩神奇还免费的工具网站收藏不后悔-搜嗖工具箱

生命倒计时 http://www.thismuchlonger.com 这是一个相哇塞的网站&#xff0c;可以让我们静下心来好好想想我们来这个世界究竟为了什么&#xff0c;因为当我们作为命运的主宰者。敲打键盘设定好自己一生长度的时候&#xff0c;我们的剩余寿命已经成绝对值&#xff0c;一旦生命…

mysql5.7配置主从

原理&#xff1a; MySQL主从复制的工作原理如下:1. 主服务器产生Binlog日志当主服务器的数据库发生数据修改操作时,如INSERT、UPDATE、DELETE语句执行,主服务器会记录这些操作的日志信息到二进制日志文件中。2. 从服务器读取Binlog日志 从服务器会向主服务器发送请求,主服务器把…

Linux网络编程——socket 通信基础

Linux网络编程——socket 通信基础 1. socket 介绍2. 字节序2.1 简介2.2 字节序举例2.3 字节序转换函数 3. socket 地址3.1 通用 socket 地址3.2 专用 socket 地址 4. IP地址转换&#xff08;字符串ip -> 整数&#xff0c;主机、网络字节序的转换 &#xff09;5. TCP 通信流…

智能驾驶规划控制理论学习05-车辆运动学规划案例分析

目录 案例一——Hybrid A*&#xff08;基于正向运动学&#xff09; 1、基本思想 2、 实现流程 3、启发函数设计 4、分析扩张&#xff08;Analytic Expansions&#xff09; 5、分级规划&#xff08;Hierarchical planning&#xff09; 案例二——State Lattice Planning&…

Vue3快速上手(十六)Vue3路由传参大全

Vue3路由传参 一、传参的多种方式 1.1 拼接方式 这种方式适合传递单个参数的情况&#xff0c;比如点击查看详情&#xff0c;传个id这样的场景 传参&#xff1a; <RouterLink to"/person?id1" active-class"active">person</RouterLink> …

RabbitMQ相关问题

RabbitMQ相关问题 一、RabbitMQ的核心组件和工作原理&#xff1f;二、如何保证消息可靠投递不丢失的&#xff1f;三、RabbitMQ如何保证消息的幂等性&#xff1f;四、什么是死信队列&#xff1f;死信队列是如何导致的&#xff1f;五、RabbitMQ死信队列是如何导致的&#xff1f;六…

PDF 解析问题调研

说点真实的感受 &#xff1a;网上看啥组件都好&#xff0c;实际测&#xff0c;啥组件都不行。效果好的不开源收费&#xff0c;开源的效果不好。测试下来&#xff0c;发现把组件融合起来&#xff0c;还是能不花钱解决问题的&#xff0c;都是麻烦折腾一些。 这里分享了目前网上能…

数据结构 第3章 栈、队列和数组(一轮习题总结)

第3章 栈、队列和数组 3.1 栈3.2 队列3.3 栈与队列的应用3.4 数组和特殊矩阵 3.1 栈&#xff08;1 10 11 20&#xff09; 3.2 队列&#xff08;6 12 14 17&#xff09; 3.3 栈与队列的应用&#xff08;6 11&#xff09; 3.4 数组和特殊矩阵 3.1 栈 T1 栈和队列具有相同的逻辑…

一周学会Django5 Python Web开发-Django5详细视图DetailView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计28条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Linux-信号2

文章目录 前言一、信号是如何保存的&#xff1f;int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset (sigset_t *set, int signo);int sigdelset(sigset_t *set, int signo);int sigismember&#xff08;const sigset_t *set, int signo);int sigpen…

leetcode 长度最小的子数组

在本题中&#xff0c;我们可以知道&#xff0c;是要求数组中组成和为target的最小子数组的长度。所以&#xff0c;我们肯定可以想到用两层for循环进行遍历&#xff0c;然后枚举所有的结果进行挑选&#xff0c;但这样时间复杂度过高。 我们可以采用滑动窗口&#xff0c;其实就是…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先&#xff0c;导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作&#xff1a; 1.1.2.1 点击开启虚拟机&#xff1a; 1.1.2.2 默认选择回车CentOS Linux&#xff08;3.10.0-1127.e17.x86_64) 7 …

同样是证书,NPDP和PMP有什么区别?

PMP和NPDP的区别是啥&#xff1f; PMP、NPDP证书考哪个更有用&#xff1f;还是两个都考&#xff1f; PMP和NPDP哪个更适合现在及以后发展&#xff1f; PMP和NPDP这两哪个含金量更高&#xff1f; 一&#xff0c;关于PMP和NPDP PMP和NPDP都是美国PMI/PDMA的专业考试&#xf…

C语言中的分支和循环语句:从入门到精通

分支和循环语句 1. 前言2. 预备知识2.1 getchar函数2.2 putchar函数2.3 计算数组的元素个数2.4 清屏2.5 程序的暂停2.6 字符串的比较 3. 结构化3.1 顺序结构3.2 分支结构3.3 循环结构 4. 真假性5. 分支语句&#xff08;选择结构&#xff09;5.1 if语句5.1.1 语法形式5.1.2 else…

Stable Cascade又升级了,现在只需要两个模型

Stable Cascade这个模型&#xff0c;大家如果还有印象的话&#xff0c;是需要下载三个模型的&#xff0c;分别是Stage_a,Stage_b和Stage_c,如果全都下载下来&#xff0c;需要20多个G&#xff0c;但是最近使用ComfyUI做尝试的时候&#xff0c;发现官方的案例中已经没有用到单独的…

数据审计 -本福德定律 Benford‘s law (sample database classicmodels _No.6)

数据审计 -本福德定律 Benford’s law 准备工作&#xff0c;可以去下载 classicmodels 数据库资源如下 [ 点击&#xff1a;classicmodels] 也可以去我的博客资源下载 文章目录 数据审计 -本福德定律 Benfords law 前言一、什么是 本福德定律&#xff1f;二、数学公式三、应用…

单细胞Seurat - 降维与细胞标记(4)

本系列持续更新Seurat单细胞分析教程&#xff0c;欢迎关注&#xff01; 非线形降维 Seurat 提供了几种非线性降维技术&#xff0c;例如 tSNE 和 UMAP&#xff0c;来可视化和探索这些数据集。这些算法的目标是学习数据集中的底层结构&#xff0c;以便将相似的细胞放在低维空间中…

Grpc项目集成到java方式调用实践

背景&#xff1a;由于项目要对接到grcp 的框架&#xff0c;然后需要对接老外的东西&#xff0c;还有签名和证书刚开始没有接触其实有点懵逼。 gRPC 是由 Google 开发的高性能、开源的远程过程调用&#xff08;RPC&#xff09;框架。它建立在 HTTP/2 协议之上&#xff0c;使用 …

从零开始手写RPC框架(3)——ZooKeeper入门

目录 ZooKeeper简介ZooKeeper中的一些概念 ZooKeeper安装与常用命令常用命令 ZooKeeper Java客户端 Curator入门 ZooKeeper简介 是什么&#xff1f; ZooKeeper 是一个开源的分布式协调服务&#xff0c;本身就是一个分布式程序&#xff08;只要半数以上节点存活&#xff0c;Zo…