详解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//100console.log(num)function test02() {let num = 200;//200console.log(num)}test02()
}
test01()

运行结果
image-20240302223551479


示例2:

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

运行结果
image-20240302224207499


示例3:

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

运行结果
image-20240302224439223


示例4:

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

运行结果

image-20240302224747276

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(触摸事件)

当手指在组件上按下、滑动、抬起时触发。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 onTouch onTouch(event: (event: TouchEvent) > void) 手指触摸动作触发该回调。 卡片能力&#xff1a; 从…

备战蓝桥杯Day22 - 计数排序

计数排序问题描述 对列表进行排序&#xff0c;已知列表中的数范围都在0-100之间。设计时间复杂度为O(n)的算法。 比如列表中有一串数字&#xff0c;2 5 3 1 6 3 2 1 &#xff0c;需要将他们按照从小到大的次序排列&#xff0c;得到1 1 2 2 3 3 5 6 的结果。那么此时计数排序是…

2000-2021年300+地级市进出口总额数据

2000-2021年300地级市进出口总额数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;进出口总额 3、单位&#xff1a;万美元 4、来源&#xff1a;城市年鉴、各省年鉴、城市公报、2021年为城市统计年鉴中进口额出口额加总之后换算成万美元&#xff0c;已尽最大可能进行…

机器学习:集成学习(Python)

一、Adaboost算法 1.1 Adaboost分类算法 adaboost_discrete_c.py import numpy as np import copy from ch4.decision_tree_C import DecisionTreeClassifierclass AdaBoostClassifier:"""adaboost分类算法&#xff1a;既可以做二分类、也可以做多分类&#…

编译链接实战(25)ThreadSanitizer检测线程安全

ThreadSanitizer&#xff08;又称为TSan&#xff09;是一个用于C/C的数据竞争检测器。在并发系统中&#xff0c;数据竞争是最常见且最难调试的错误类型之一。当两个线程并发访问同一个变量&#xff0c;并且至少有一个访问是写操作时&#xff0c;就会发生数据竞争。C11标准正式将…

javaweb请求与响应

前言 前面介绍了对应的服务器端的相关代码。这里开始学习服务器端与客户端的数据请求与响应 这里的仅仅是一个简单的调用&#xff0c;并没有经过servelert接口来进行调用&#xff0c;同前面的一样&#xff0c;我们介绍对应的本地服务器进行的部署项目。 代码 //属于简单的不…

【硬件相关】RDMA网络类别及基础介绍

文章目录 一、前言1、RDMA网络协议2、TCP/IP网络协议 二、RDMA类别1、IB2、RoCE3、iWARP 三、RDMA对比1、优缺点说明a、性能b、扩展性c、维护难度 2、总结说明 一、前言 roce-vs-infiniband-vs-tcp-ip RoCE、IB和TCP等网络的基本知识及差异对比 分布式存储常见网络协议有TCP/IP…

CSS 【详解】响应式布局(含 rem 详解)

响应式布局&#xff1a; 同一页面在不同的屏幕上有不同的布局&#xff0c;即一套代码自适应不同的屏幕。 为什么 rem 能用于实现响应式布局&#xff1f; px 绝对长度单位&#xff0c;不同客户端表现都相同&#xff0c;不具有响应式em 相对长度单位&#xff0c;相对于父元素的 f…

小白学视觉 | 详解遗传算法 GA(Python实现代码)

本文来源公众号“小白学视觉”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;详解遗传算法 GA&#xff08;Python实现代码&#xff09; 转自&#xff1a;机器之心 英文&#xff1a;www.analyticsvidhya.com/blog/2017/07/introduc…

40、网络编程/TCP和UDP通信模型练习20240229

一、使用TCP模型创建服务器和客户端完成简单通信。 服务器代码&#xff1a; #include<myhead.h> #define SER_IP "192.168.32.130" #define SER_PORT 8888 int main(int argc, const char *argv[]) {//1.创建监听的套接字int sfd-1;sfdsocket(AF_INET,SOCK_S…

Vue2:用node+express部署Vue项目

一、编译项目 命令 npm run build执行命令后&#xff0c;我们会在项目文件夹中看到如下生成的文件 二、部署Vue项目 接上一篇&#xff0c;nodeexpress编写轻量级服务 1、在demo中创建static文件夹 2、将dist目录中的文件放入static中 3、修改server.js文件 关键配置&…

代码随想录算法训练营第四十六天 139.单词拆分、多重背包(了解)、 背包总结

代码随想录算法训练营第四十六天 | 139.单词拆分、多重背包&#xff08;了解&#xff09;、 背包总结 139.单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean wordBreak(String s, List<String> wo…