首页 > 其他分享 >函数及其所有相关知识点详解及实例

函数及其所有相关知识点详解及实例

时间:2024-09-20 16:20:03浏览次数:11  
标签:function 知识点 console 函数 实例 作用域 详解 参数 log

一、JavaScript函数基础

在JavaScript中,函数是一等公民,这意味着函数可以像其他数据类型一样被传递和操作。函数可以封装代码块,提高代码的复用性和解耦性。

1. 函数声明

  1. 定义函数:   function 自定义函数名() {}
  2. 调用函数:   函数名()
function add(a, b) {
    return a + b;
}

add(2, 8);  // 10
函数中的参数
  • 形参:  在函数名后面()中定义的变量。例:a,b就是形参。
  • 实参:  调用函数的时候()中的值。例:2,8就是实参。
形参和实参之间的关系
  • 形参本质上就是一个变量,实参就是用来给形参变量赋值的。
  • 在赋值的过程中,赋值的顺序是对应的,第一个实参就会给第一个形参赋值,依次类推。

2. 箭头函数

  • ES6引入了箭头函数,它提供了更为简洁的语法,特别适用于单一表达式的函数。
  • 它们不绑定自己的this,arguments,super或new.target。 
const multiply = (a, b) => a * b;
ES6中函数的参数
  • ES6引入了默认参数、剩余参数和展开运算符,使得函数参数的处理更加灵活。
1)默认参数

在ES6之前,如果函数的某个参数没有被传递,该参数将是undefined。ES6允许直接为函数参数设置默认值,这样即使参数没有被传递,函数也会使用默认值。

function greet(name = 'Anonymous') {
    console.log(`Hello, ${name}!`);
}

greet(); // 输出 "Hello, Anonymous!"
greet('Alice'); // 输出 "Hello, Alice!"
2)剩余参数

剩余参数语法允许函数接收不定数量的参数,这些参数会被收集到一个数组中。剩余参数必须是参数列表中的最后一个参数。剩余参数使用(...)语法,并且必须放置在参数列表的最后。

// 示例1:简单的剩余参数使用
function printAllValues(...values) {
    values.forEach(value => console.log(value));
}

printAllValues(1, 2, 3, 4, 5);
// 输出:
// 1
// 2
// 3
// 4
// 5

// 示例2:剩余参数与已定义参数的结合
function sum(firstArg, secondArg, ...remainingArgs) {
    remainingArgs.forEach(remainingArgs => console.log(remainingArgs));
}

sum(1, 2, 3, 4, 5);
// 输出:
// 3
// 4
// 5
3)展开运算符

展开运算符(...)可以用于函数调用时将一个数组或类数组对象展开为一系列参数。它与剩余参数一起工作,但方向相反。

// 在函数调用中的应用
function sum(x, y, z) {
    return x + y + z;
}
const numbers = [1, 2, 3, 4, 5];
console.log(sum(...numbers)); // 输出 6,等同于 sum(1, 2, 3)

// 快速拼接数组或复制数组
const fruits = ['apple', 'banana'];
const desserts = ['pie', 'cake'];
const allFoods = [...fruits, 'cherry', ...desserts];
console.log(allFoods) // 输出 ['apple', 'banana', 'cherry', 'pie', 'cake']

// 合并多个对象或创建对象的浅拷贝
const user = { name: 'Alice', age: 25 };
const settings = { job: 'Engineer', city: 'Seattle' };
const profile = { ...user, ...settings };
console.log(profile) // 输出 { name: 'Alice', age: 25, job: 'Engineer', city: 'Seattle' }

3. 函数的返回值

  • 函数中的返回值不是必须要设置的。
  • 如果在函数外部使用函数内部变量的值,函数必须加返回值。
  • 一个函数中只能写一个 return。
  • 当程序执行了return之后,return后面的代码不会执行,立即结束当前函数。
  • 函数中的返回值可以是任何的一种数据类型,返回值是什么,得到的结果就是什么。
  • 如果函数中只写了return,那么得到的结果是undefined。
function fn() {
    // 将变量a设置为返回值
    let a = 123;
    return a;
}
// 接收函数中的返回值
let b = fn();
console.log(b); // 123


function fn() {
    let a = 123;
    let b = 456;
    let c = 'abc';
    return;
}
let res = fn();
console.log(res); // undefined

4. 匿名函数

  • 匿名函数: 没有名字的函数
  • 具名函数: 有具体名字的函数
function () {
    console.log(123);
}
匿名函数调用方法

a) 将匿名函数赋值给一个变量, 通过变量() 调用执行。

let fn = function () {
    console.log(123);
}

fn();

b) 让匿名函数自己调用自己,自调用函数。

  • 语法:  (函数体)();
  • 注意: 自调用函数后面必须写分号!!!
(function() {
    console.log(123);
})();

5. 作用域

  • 全局作用域: 函数外部的区域,都是全局作用域。
  • 局部作用域: 只要是函数内部,那就是局部作用域。
  • 程序在执行代码的时候,先从当前的作用域中找变量,如果当前作用域中没有变量,则要去全局作用域中找变量,找到就执行,否则报错。

// 变量a在全局作用域中
let a = 123;
// 函数fn在全局作用域中
function fn() {
    let a = 456;// 变量a在局部作用域中
    console.log(a);
} 
// 先在局部作用域中找变量a,如果没有再到全局作用域中找
fn(); // 456

6. 闭包

  • 允许一个函数记住并访问其父函数作用域中的变量,即使该父函数已经执行完毕。
  • 闭包的关键在于它能够形成一个函数与其外部作用域的引用关系,即使外部函数的执行上下文已经销毁,闭包内部依然可以访问这些变量。
function createCounter() {
    var count = 0;
    return function() {
        return count++;
    };
}

const counter = createCounter();
console.log(counter()); // 输出 0
console.log(counter()); // 输出 1

7. 回调函数

回调函数是作为参数传递给另一个函数的函数,通常用于处理异步操作的结果。

function asyncOperation(callback) {
    setTimeout(() => {
        callback("Operation completed");
    }, 1000);
}

asyncOperation(function(result) {
    console.log(result); // 输出 "Operation completed"
});

标签:function,知识点,console,函数,实例,作用域,详解,参数,log
From: https://blog.csdn.net/dlmyrt/article/details/142355686

相关文章

  • 实时美颜的技术突破:视频美颜SDK与直播美颜工具的开发详解
    如今,视频美颜SDK和直播美颜工具的开发,为各类应用提供了技术支持,使得美颜效果更加智能、高效。本文将详细探讨实时美颜的技术突破及其在视频美颜SDK和直播美颜工具中的应用与开发。 一、视频美颜SDK的核心技术1.人脸检测与特征点识别视频美颜SDK的第一步是对用户的面部进行精准检测......
  • docker详解(一)
    1、虚拟化技术        1.1、什么是虚拟化        在计算机技术中,虚拟化(Virtualization)是一种资源管理技术。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这......
  • 【网络安全】基础知识详解(非常详细)零基础入门到精通,收藏这一篇就够了_网络安全的入门
    ......
  • 电脑网络怎么弄动态ip :步骤详解与优势探讨
    在当今的数字化时代,网络连接已成为我们日常生活和工作中不可或缺的一部分。对于大多数用户而言,动态IP地址是一种便捷且常用的网络配置方式,它允许设备在每次连接到网络时自动获取一个新的IP地址。这种设置不仅简化了网络管理,还提高了网络的安全性和灵活性。本文将详细介绍如何为......
  • 如何高效利用API进行电商开发:淘宝API接口详解
    淘宝(AlibabaGroup)提供了丰富的API接口供开发者使用,这些接口可以帮助开发者在淘宝平台上实现各种功能,如商品搜索、交易管理、订单处理等。对于电商开发者来说,高效利用淘宝API进行开发至关重要。以下是一些关键步骤和技巧,帮助你高效利用淘宝AP进行电商开发:了解淘宝开放平台注......
  • 【Git】Git Commit Angular规范详解
    在团队协作开发中,保持Git提交记录的一致性和清晰性对于维护项目的可读性和历史追溯至关重要。Angular团队提出了一套详细的CommitMessage格式化规范,旨在解决这一问题。下面将详细介绍如何遵循Angular规范来编写Git提交信息,并探讨其带来的好处。Angular规范的核心要素Angu......
  • Python中Matplotlib详解
    文章目录Python中Matplotlib详解一、引言二、Matplotlib基础1、安装Matplotlib2、Matplotlib的构成3、基本绘图3.1、导入库3.2、创建数据3.3、绘制图形三、高级特性1、定制化图形1.1、设置标题1.2、设置坐标轴标签1.3、显示图例2、与其他库的协同2.1、使用numpy2.2、......
  • 【网络原理】❤️Tcp 常用机制❤️ —— 延时应答,捎带应答, 面向字节流, 异常情况处理。保姆
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 操作符详解
    目录进制与进制转化十进制二进制 十六进制 十进制转化成二进制二进制转化成八进制逗号表达式下标访问与函数调用[]下标引用操作符()函数调用操作符结构成员访问操作符结构体概念结构的声明结构体变量初始化与打印操作符的属性优先级结合性进制与进制......
  • 详解 HTTPS、TLS、SSL、HTTP区别和关系
    一、什么是HTTPS、TLS、SSLHTTPS,也称作HTTPoverTLS。TLS的前身是SSL,TLS1.0通常被标示为SSL3.1,TLS1.1为SSL3.2,TLS1.2为SSL3.3。下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系 二、HTTP和HTTPS协议的区别1、HTTPS协议需要到证书颁发机构(CertificateA......