当前位置: 首页 > article >正文

JavaScript 函数 function

JavaScript 函数是一个包含代码的可重用块,用于执行特定的任务或计算值。函数在编程中是基础而重要的概念,允许你封装和组织代码,从而提高代码的可重用性和可维护性。

一. 函数定义

1 函数定义

函数通常使用 function 关键字来定义。一个函数包括函数名、参数列表和函数体。

function add(a, b) {
  return a + b;
}
  • 函数名:add 是函数的名字。
  • 参数列表:a 和 b 是函数的参数。
  • 函数体:包含要执行的代码,在这个例子中是 return a + b;。

调用函数
一旦定义了函数,可以通过函数名和实际参数来调用它。

const result = add(3, 4);
console.log(result); // 输出: 7

2 函数表达式

函数表达式将函数定义作为一个表达式赋值给变量。函数表达式可以是具名的或匿名的。

const add = function(a, b) {
  return a + b;
};

console.log(add(2, 3)); // 输出: 5

具名函数表达式:

const multiply = function multiply(a, b) {
  return a * b;
};

console.log(multiply(4, 5)); // 输出: 20

特点:

  • 只有在函数表达式定义后才能调用。
  • 允许匿名函数,适用于即时调用和回调函数。

3 箭头函数

箭头函数是一种简洁的函数写法,使用 => 语法,适用于简化函数表达式。

const subtract = (a, b) => a - b;

console.log(subtract(7, 4)); // 输出: 3

单个参数时可以省略括号:

const square = x => x * x;

console.log(square(5)); // 输出: 25

特点:

  • 不绑定自己的 this、arguments、super 或 new.target。
  • 适用于函数体只有一行的情况,可以省略大括号和 return 关键字。

二 函数的特性

1 参数和返回值

函数可以接受多个参数,也可以有默认值,函数通过 return 语句返回值。

function greet(name = 'Guest') {
  return `Hello, ${name}!`;
}

console.log(greet()); // 输出: Hello, Guest!

2 默认参数:

函数可以指定默认参数值,如果调用时没有提供参数,则使用默认值。

function greet(name = 'Guest') {
  return `Hello, ${name}!`;
}
console.log(greet()); // 输出: Hello, Guest!

3 Rest 参数

Rest 参数(…)用于表示函数可以接受不确定数量的参数,这些参数会被收集到一个数组中。

function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 输出: 10

特点:

  • 允许函数处理任意数量的参数。
  • 在函数定义中必须是最后一个参数。

4 剩余参数与展开运算符

… 运算符还可以用于展开数组或对象。

// 数组展开
const nums = [1, 2, 3];
console.log(...nums); // 输出: 1 2 3

// 对象展开
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };
console.log(obj2); // 输出: { a: 1, b: 2, c: 3 }

三. 高级函数特性

1 闭包

闭包允许函数访问其定义时的作用域。即使外部函数已返回,闭包仍能访问外部函数的变量。

function createCounter() {
  let count = 0;
  return function() {
    count += 1;
    return count;
  };
}

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

特点:

  • 允许函数拥有私有数据。
  • 常用于实现数据封装和工厂模式。

2 立即调用函数表达式 (IIFE)

IIFE 是一种在定义时立即执行的函数表达式,通常用于创建私有作用域,避免变量污染全局作用域。

(function() {
  console.log('This function runs immediately!');
})();

特点:

  • 用于隔离变量作用域,避免全局变量冲突。
  • 立即执行,适用于一次性初始化代码。

3 函数柯里化

柯里化是将一个多参数函数转化为一系列单参数函数的过程。每次返回一个新函数,直到所有参数都提供为止。

function multiply(a) {
  return function(b) {
    return a * b;
  };
}

const double = multiply(2);
console.log(double(5)); // 输出: 10

特点:

  • 允许部分应用函数。
  • 增强函数的灵活性和可重用性。

4 函数绑定

Function.prototype.bind() 方法创建一个新函数,在调用时将 this 关键字固定为传入的值,并且可以预设参数。

const person = {
  name: 'Alice',
  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

const greet = person.greet.bind(person);
greet(); // 输出: Hello, my name is Alice

特点:

  • 固定函数的 this 值。
  • 可以预设部分参数(柯里化)。

四 总结

JavaScript 函数是非常强大的工具,能够处理各种编程需求。无论是简单的函数声明还是复杂的闭包和柯里化,掌握这些特性将有助于编写更高效、灵活且可维护的代码。通过理解函数的不同定义方式及其特性,你可以更好地组织和优化你的JavaScript 代码。


http://www.kler.cn/news/307302.html

相关文章:

  • 用 nextjs 创建 Node+React Demo
  • WebGL入门(048):OES_draw_buffers_indexed 简介、使用方法、示例代码
  • Python---爬虫
  • Leetcode-轮转数组
  • 复现OpenVLA:开源的视觉-语言-动作模型及原理详解
  • 【Go开发】Go语言结构体,与java类不一样的定义方式
  • 推荐|基于springBoot智能推荐的卫生健康系统设计与实现(源码+论文+数据库)
  • 【附源码】用Python开发一个音乐下载工具,并打包EXE文件,所有音乐都能搜索下载!
  • el-table 的单元格 + 图表 + 排序
  • 动手学深度学习(pytorch土堆)-03常见的Transforms
  • 图论篇--代码随想录算法训练营第五十六天打卡| 108. 冗余连接,109. 冗余连接II
  • 【SQL】百题计划:SQL排序Order by的使用。
  • Flutter Error: Type ‘UnmodifiableUint8ListView‘ not found
  • 刷题DAY36
  • 初中生物--5.单细胞生物
  • VuePress搭建文档网站/个人博客(详细配置)主题配置-导航栏配置
  • 【开源免费】基于SpringBoot+Vue.JS企业客户管理系统(JAVA毕业设计)
  • Linux命令:文本处理工具sed详解
  • django中F()和Q()的用法
  • 保姆级离线+windows环境+大模型前端UI安装(二)
  • 基于Spring Boot的停车场管理系统的设计与实现
  • 【STL】 set 与 multiset:基础、操作与应用
  • Vue路由配置、网络请求访问框架项目、element组件介绍学习
  • 数据库连接池与Druid【后端 16】
  • STM32 HAL freertos零基础(十)软件定时器
  • Renesas R7FA8D1BH (Cortex®-M85)控制ISLS29035
  • Unity-Transform类-父子关系
  • 五、(JS)window中的定时器
  • PhotoZoom Pro / Classic 9.0.2激活版安装激活图文教程
  • 栈与队列(c语言实现)