JavaScript中的函数基础知识

news/2025/2/22 1:43:36/

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 函数声明语句

javascript">function fn(x,y,z){...
}

1.2 函数表达式

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

1.3 new Function

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

javascript">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对象(是个伪数组)

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

4.2 获取形参的个数

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

4.3 函数不存在重载

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

javascript">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) 基本数据类型传递(值传递)

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

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

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

示例1:

javascript">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:

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

示例3:

javascript">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:

javascript">//这个与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.函数属性

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

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


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

相关文章

未来AI方向落地场景:小语言模型,super_private_agent

未来AI方向落地场景:小语言模型,super_private_agent 目录 未来AI方向落地场景:小语言模型,super_private_agent小语言模型super - private - agent(注重隐私的智能代理)碳基生命和硅基生命交互界面面向agent的专用交互协议和数据接口从web平台经济到网络平台举例说明社交…

SQL知识体系

SQL复习 MySQL SQL介绍 SQL SQL的全拼是什么? SQL全拼:Structured Query Language,也叫结构化查询语言。 SQL92和SQL99有什么区别呢? SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用(&#xff…

Python 爬虫selenium

1.selenium自动化 selenium可以操作浏览器,在浏览器页面上实现:点击、输入、滑动 等操作。 不同于selenium自动化,逆向本质是: 分析请求,例如:请求方法、请求参数、加密方式等。用代码模拟请求去实现同等…

<iframe>标签嵌入pdf文件在谷歌浏览器中无法显示

问题描述&#xff1a; 使用<iframe>标签嵌入pdf文件&#xff0c;在谷歌浏览器中无法显示&#xff0c;提示已被屏蔽 源码&#xff1a; <iframe src"https://example.com/path/to/your.pdf" style"width:100%; height:800px;"></iframe>…

深入解析Qt事件循环

在Qt开发中&#xff0c;QApplication::exec()这行代码是每个开发者都熟悉的“魔法咒语”。为什么GUI程序必须调用它才能响应操作&#xff1f;为何耗时操作会导致界面冻结&#xff1f;本文将以事件循环为核心&#xff0c;揭示Qt高效运转的底层逻辑&#xff0c;探讨其设计哲学与最…

C语言基础15:冒泡排序

数组的典型应用&#xff1a;冒泡排序 向后冒泡 思想&#xff1a; 1.一次排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n - 1次就可以排好 2.每次排序将相邻数据两两对比&#xff0c;将较大或者较小的数据向后交换&#xff0c;等所有数据比较完成&#xff0c;将较大…

ImportError: cannot import name ‘FixtureDef‘ from ‘pytest‘

错误信息表明 pytest 在尝试导入 FixtureDef 时出现了问题。通常是由于 pytest 版本不兼容 或 插件版本冲突 引起的。以下是详细的排查步骤和解决方案&#xff1a; 1. 检查 pytest 版本 首先&#xff0c;确认当前安装的 pytest 版本。某些插件可能需要特定版本的 pytest 才能…

记录一次部署PC端网址全过程

当我查看我之前写的文章时、顿时惊奇发出感慨&#xff1a;啥时候写的&#xff1f;是我写的么&#xff1f;疑惑重重… 所以说&#xff0c;好记性不如烂笔头。 记录一次部署PC端网址全过程 部署PC端网址分是三步&#xff1a;第一步&#xff1a;申请域名并映射到外网IP &#xff0…