Skip to content

函数

JavaScript 函数是 JavaScript 编程中的一个核心概念,它们允许你将代码组织成可重用的块。函数可以接受参数、执行特定任务,并且可以返回结果。JavaScript 中的函数非常灵活,支持多种定义方式和调用方式。

函数的基本概念

  1. 函数定义

    • 你可以使用 function 关键字来定义一个函数。
    • 函数可以有名称(命名函数)或匿名(通常用于立即执行函数表达式 IIFE 或作为回调函数)。
  2. 函数调用

    • 通过函数名加上括号来调用函数。
    • 括号内可以传递参数。
  3. 参数

    • 函数可以接受零个或多个参数。
    • 参数在函数体内部作为局部变量使用。
  4. 返回值

    • 函数可以通过 return 语句返回一个值。
    • 如果没有 return 语句,函数默认返回 undefined

函数的定义方式

命名函数

javascript
function greet(name) {
  console.log("Hello, " + name + "!");
}

greet("Alice"); // 输出: Hello, Alice!

函数表达式

javascript
const greet = function (name) {
  console.log("Hello, " + name + "!");
};

greet("Bob"); // 输出: Hello, Bob!

箭头函数(ES6+)

javascript
const greet = (name) => {
  console.log("Hello, " + name + "!");
};

greet("Charlie"); // 输出: Hello, Charlie!

对于单行箭头函数,可以省略花括号和 return 语句:

javascript
const add = (a, b) => a + b;
console.log(add(3, 5)); // 输出: 8

函数的作用域

  • 全局作用域:在全局作用域中定义的函数可以在任何地方调用。
  • 局部作用域:在函数内部定义的函数只能在该函数内部调用。
javascript
function outer() {
  function inner() {
    console.log("I'm inside the inner function");
  }
  inner(); // 可以调用 inner 函数
}

outer(); // 输出: I'm inside the inner function

// inner();  // 这里会抛出 ReferenceError: inner is not defined

函数的参数

  • 默认参数(ES6+):如果调用函数时没有提供某些参数,可以为这些参数设置默认值。
javascript
function greet(name = "Guest") {
  console.log("Hello, " + name + "!");
}

greet(); // 输出: Hello, Guest!
greet("David"); // 输出: Hello, David!
  • 剩余参数(ES6+):允许函数接受任意数量的参数。
javascript
function sum(...numbers) {
  return numbers.reduce((acc, num) => acc + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 输出: 10
  • 解构赋值(ES6+):可以在函数参数中使用对象或数组解构。
javascript
function printPerson({ name, age }) {
  console.log(`Name: ${name}, Age: ${age}`);
}

printPerson({ name: "Eve", age: 25 }); // 输出: Name: Eve, Age: 25

函数的返回值

  • 返回值:函数可以通过 return 语句返回一个值。
javascript
function add(a, b) {
  return a + b;
}

console.log(add(5, 3)); // 输出: 8
  • 隐式返回:如果没有 return 语句,函数默认返回 undefined
javascript
function noReturn() {
  let result = 42;
}

console.log(noReturn()); // 输出: undefined

高阶函数

  • 高阶函数:接受函数作为参数或返回函数的函数。
javascript
function higherOrderFunction(callback) {
  callback();
}

higherOrderFunction(function () {
  console.log("Callback executed!");
}); // 输出: Callback executed!

// 使用箭头函数
higherOrderFunction(() => {
  console.log("Arrow function callback executed!");
}); // 输出: Arrow function callback executed!

[立即执行函数表达式(IIFE)]

  • IIFE:在定义时立即执行的函数表达式。
javascript
(function () {
  console.log("IIFE executed!");
})();

// 输出: IIFE executed!

闭包

  • 闭包:函数可以访问其外部函数的变量,即使外部函数已经执行完毕。
javascript
function createCounter() {
  let count = 0;

  return function () {
    count++;
    return count;
  };
}

const counter = createCounter();

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

[构造函数]

[函数与构造函数区别]

总结

JavaScript 函数是强大的工具,可以用来组织和复用代码。通过理解函数的不同定义方式、作用域、参数处理、返回值以及高级特性如高阶函数和闭包,你可以编写更加高效和模块化的代码。如果你有更多关于 JavaScript 函数的具体问题或需要进一步的例子,请告诉我!

Released under the MIT License.