JavaScript中的函数基础知识

JavaScript中的函数基础知识

  • 1.函数声明的三种方式
    • 1.1 函数声明语句
    • 1.2 函数表达式
    • 1.3 new Function
  • 2.函数的返回值
  • 3.函数调用的几种方法
  • 4.函数参数
    • 4.1 函数内部的arguments对象(是个伪数组)
    • 4.2 获取形参的个数
    • 4.3 函数不存在重载
    • 4.4 参数传递
      • (1) 基本数据类型传递(值传递)
      • (2) 引用数据类型传递(引用传递)
      • (3) 总结
  • 5.函数属性

1.函数声明的三种方式

1.1 函数声明语句

function fn(x,y,z){
  ...
}

1.2 函数表达式

 let sum1 =function(){}//匿名函数
 let sum2 =()=>{} //箭头函数
 let sum3=function sumFn(){}//有名称sumFn,sumFn只能在函数内部用

1.3 new Function

最后一个参数是我们要执行的函数体,语法如下:
let funcName= new Function("arg1","arg2","arg3","arg4","arg5",......,"函数体")

let sum=new Function("a","b","return a+b")

2.函数的返回值

return后不跟值或者没有return,则默认该函数的返回值为undefined

3.函数调用的几种方法

  • 函数调用方法
  • 对象的方法调用方式(打点方式)
  • 构造函数调用方式
  • 间接调用方式
    call、apply、call等方法

以上几种调用方法相信大家都清楚。不太了解的参见https://blog.csdn.net/fageaaa/article/details/145694249

4.函数参数

4.1 函数内部的arguments对象(是个伪数组)

function add(x,y){
    console.log(arguments[2])//3
}
add(1,2,3);

4.2 获取形参的个数

function add(x,y){
   ...
}
console.log(add.length)//2

4.3 函数不存在重载

ps:java中是存在重载的。我们可以举一个例子:

function add(x, y) {
  console.log(x + y);
}
function add(x, y, z) {
  console.log(x + y + z);
}
//在javascript中这里答应NaN,而不是3。因为在javascript中不存在重载,一旦两个函数名相同
//后一个函数就会覆盖前一个函数,所以z=undefined,相加是非数字类型
add(1, 2); //NaN
add(1, 2, 3); //6

重载:定义相同的函数名,传入的不同参数;

4.4 参数传递

(1) 基本数据类型传递(值传递)

被传递的值会被复制到另外一个局部变量。

function addTen(num) {
  num += 10;
  return num;
}
let count = 20;
let result = addTen(count);
alert(count); // 20, 没有变化
alert(result); // 30

(2) 引用数据类型传递(引用传递)

示例1:

function setName(obj) {
  obj.name = 'Nicholas';
  obj = new Object();
  obj.name = 'Greg';
}

let person = new Object();
setName(person);
//obj的值指向了person
//obj.name = 'Nicholas',所以person的值name被改为了Nicholas,
//之后obj = new Object(),它自己又开辟了一个新地址
//所以obj.name = 'Greg'该的是obj新地址内name的值而不是person的name值
alert(person.name); // Nicholas

示例2:

function fn(obj = { name: "沙和尚" }) {
    console.log(obj);
    obj.name = "唐僧";
    console.log(obj);
}
//调用fn,obj开辟一块新地址
fn(); //沙和尚 唐僧
//调用fn,obj依然开辟一块新地址
fn(); //沙和尚 唐僧

示例3:

let obj = { name: "沙和尚" };
function fn(a = obj) {
   console.log(a);
   obj.name = "唐僧";
   console.log(a);
}
//调用fn,将obj的地址传递给a(a指向obj)
fn(); //沙和尚 唐僧
//调用fn,将obj的地址传递给a(a指向obj)
//但这时候obj的name已经被改为了唐僧
fn(); //唐僧 唐僧

示例4:

//这个与3类似
let obj = { name: "沙和尚" };
function fn(a) {
    console.log(a);
    obj.name = "唐僧";
    console.log(a);
}
fn(obj); //沙和尚 唐僧
fn(obj); //唐僧 唐僧

(3) 总结

  • 值传递:
    将number, string, boolean, undefined, null, 和 symbol这些类型的变量作为参数传递给函数时,函数内部接收的是这些值的副本
  • 引用传递:
    将对象(Object)、数组(Array)和函数(Function)等复合类型的变量作为参数传递给函数时,函数内部接收的这些对象在内存中的地址的副本,而不是对象的实际内容。因此,对参数所做的任何修改都会影响原始对象。

5.函数属性

function fn(a, b) {
     //形参的个数
     console.log(arguments.length); //3
     //实参的个数
     console.log(fn.length); //2
     console.log(fn.name); //fn
}
fn(1, 2, 3);
console.dir(fn);

打印的fn结果如下:
在这里插入图片描述

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

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

相关文章

fpga助教面试题

第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…

调用openssl实现加解密算法

由于工作中涉及到加解密&#xff0c;包括Hash&#xff08;SHA256&#xff09;算法、HMAC_SHA256 算法、ECDH算法、ECC签名算法、AES/CBC 128算法一共涉及5类算法&#xff0c;笔者通过查询发现openssl库以上算法都支持&#xff0c;索性借助openssl库实现上述5类算法。笔者用的op…

RTSP协议讲解及漏洞挖掘

文章目录 前言一、RTSP协议简介二、RTSP协议常见应用场景包括三、攻击RTSP协议的好处四、RTSP多种认证模式五、工具使用下载地址六、RTSP协议漏洞挖掘手法 前言 实时流传输协议&#xff08;Real Time Streaming Protocol&#xff0c;RTSP&#xff09;&#xff0c;RFC2326&…

Mysql各操作系统安装全详情

" 至高无上的命运啊~ " MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Mana…

Elasticsearch7.1.1 配置密码和SSL证书

生成SSL证书 ./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass 我这里没有设置ssl证书密码&#xff0c;如果需要设置密码&#xff0c;需要再配置给elasticsearch 在之前的步骤中&#xff0c;如果我们对elastic-certificates.p12 文件配置了密码…

EasyExcel 自定义头信息导出

需求&#xff1a;需要在导出 excel时&#xff0c;合并单元格自定义头信息(动态生成)&#xff0c;然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…

C++基础知识学习记录—模版和泛型编程

1、模板 概念&#xff1a; 模板可以让类或者函数支持一种通用类型&#xff0c;在编写时不指定固定的类型&#xff0c;在运行时才决定是什么类型&#xff0c;理论上讲可以支持任何类型&#xff0c;提高了代码的重用性。 模板可以让程序员专注于内部算法而忽略具体类型&#x…

Django 连接(sqlserver)数据库方法

文章目录 django 的SQL server适配器&#xff0c;例如django-pyodbc-azure 或 mssql-django1、django-pyodbc-azure2、mssql-django3、注意 Django只内置了几个 Database Backend&#xff08;mysql、oracle、sqllite3&#xff08;默认&#xff09;、postgresql_psycopg2&#x…

华为 eNSP:MSTP

一、MSTP是什么 MSTP是多业务传送平台&#xff08;Multi-Service Transport Platform&#xff09;的缩写&#xff0c;它是一种基于SDH&#xff08;同步数字体系&#xff09;技术的传输网络技术&#xff0c;用于同时实现TDM、ATM、以太网等多种业务的接入、处理和传送。 MSTP技…

Mac端homebrew安装配置

拷打了一下午o3-mini-high&#xff0c;不如这位博主的超强帖子&#xff0c;10分钟结束战斗 跟随该文章即可&#xff0c;2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次&#xff0c;点赞258次&#xff0c;收藏837次。一直觉得自己写…

一台服务器将docker image打包去另一天服务器安装这个镜像

一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…

Web开发技术概述

Web开发技术涵盖了前端和后端开发&#xff0c;以及数据库技术。前端开发包括使用HTML、CSS、JavaScript等原生技术&#xff0c;以及jQuery、Bootstrap、AngularJS、React、Vue等框架。后端开发则涉及ASP.NET、PHP、Python Web&#xff08;Flask、Django&#xff09;、Java Web&…

【项目日记】仿RabbitMQ实现消息队列 --- 模块设计

你要的答案不在书本里&#xff0c; 也不能靠别人来解决&#xff0c; 除非你想一辈子当小孩。 你必须在自我内部找到答案&#xff0c; 感受到该做的正确事情。 --- 《献给阿尔吉侬的花束》--- 仿RabbitMQ实现消息队列 1 数据管理模块1.1 交换机数据管理模块1.2 队列数据管…

C++ Primer 构造函数再探

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略

目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统&#xff08;DBMS&#xff09;架构与 SQL 注入 什么是 SQL 注入&#xff1f; SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入&#xff1f; 数据库分类 数据库类型&am…

自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone

苹果的AirTag很贵&#xff0c;虽然某强北有平价代替品&#xff0c;但是仍需要苹果设备才能绑定&#xff0c;才能查看位置。不支持安卓/鸿蒙/PC&#xff0c;也不支持集成到Home Assistant中。 AirTag 的原理 每个AirTag都会发送一个蓝牙信号&#xff0c;其可以被临近的苹果设备…

网络技术变迁:从IPv4走向IPv6

目录 前言 旧时代产物&#xff1a;IPv4 什么是IPv4&#xff1f; IPv4的工作方式 IPv4的缺点 为什么要从IPv4过渡到IPv6&#xff1f; 走向IPv6&#xff1a;新一代互联网协议 IPv6的技术特性 我们需要过渡技术 双栈&#xff08;Dual Stack&#xff09; 隧道技术&#…

uniapp 滚动尺

scale组件代码&#xff08;部分class样式使用到了uview1.0的样式&#xff09; <template><view><view class"scale"><view class"pointer u-flex-col u-col-center"><u-icon name"arrow-down-fill" size"26&qu…

模型量化初始知识

原文网址&#xff1a;知乎原文-量化基础知识 背景 PyTorch对量化的支持目前有如下三种方式&#xff1a; Post Training Dynamic Quantization&#xff0c;模型训练完毕后的动态量化&#xff1b; Post Training Static Quantization&#xff0c;模型训练完毕后的静态量化&…

在项目中调用本地Deepseek(接入本地Deepseek)

前言 之前发表的文章已经讲了如何本地部署Deepseek模型&#xff0c;并且如何给Deepseek模型投喂数据、搭建本地知识库&#xff0c;但大部分人不知道怎么应用&#xff0c;让自己的项目接入AI模型。 文末有彩蛋哦&#xff01;&#xff01;&#xff01; 要接入本地部署的deepsee…