微信登录

JavaScript 基础复习 - 函数 - 函数定义与调用

JavaScript 基础复习 - 函数 - 函数定义与调用

在 JavaScript 的世界里,函数是一等公民,它是代码复用、模块化编程的核心要素。理解函数的定义和调用方式,是掌握 JavaScript 编程的重要一步。本文将详细介绍 JavaScript 中函数的定义与调用,结合实际例子让你轻松掌握。

函数定义

函数声明

函数声明是定义函数最常见的方式之一,它使用 function 关键字,后面跟着函数名、参数列表和函数体。函数声明具有提升(hoisting)特性,这意味着你可以在函数声明之前调用该函数。

  1. // 函数声明
  2. function greet(name) {
  3. return `Hello, ${name}!`;
  4. }
  5. // 调用函数
  6. let message = greet('John');
  7. console.log(message); // 输出: Hello, John!

函数表达式

函数表达式是将一个匿名函数赋值给一个变量。与函数声明不同,函数表达式不会被提升,因此你必须在定义之后才能调用它。

  1. // 函数表达式
  2. const add = function(a, b) {
  3. return a + b;
  4. };
  5. // 调用函数
  6. let result = add(3, 5);
  7. console.log(result); // 输出: 8

箭头函数

箭头函数是 ES6 引入的一种简洁的函数定义方式,它使用箭头(=>)来定义函数。箭头函数没有自己的 thisargumentssupernew.target,适合用于简单的回调函数。

  1. // 箭头函数
  2. const multiply = (a, b) => a * b;
  3. // 调用函数
  4. let product = multiply(4, 6);
  5. console.log(product); // 输出: 24

构造函数方式

虽然不常用,但 JavaScript 也允许使用 Function 构造函数来定义函数。这种方式接收多个参数,最后一个参数是函数体,前面的参数是函数的参数列表。

  1. // 构造函数方式定义函数
  2. const divide = new Function('a', 'b', 'return a / b;');
  3. // 调用函数
  4. let quotient = divide(10, 2);
  5. console.log(quotient); // 输出: 5

函数调用

直接调用

直接调用是最常见的函数调用方式,通过函数名后面跟括号来调用函数。

  1. function sayHi() {
  2. console.log('Hi!');
  3. }
  4. sayHi(); // 输出: Hi!

作为对象方法调用

当函数作为对象的属性时,它被称为对象的方法。可以通过对象名和点号来调用该方法。

  1. const person = {
  2. name: 'Alice',
  3. introduce: function() {
  4. console.log(`My name is ${this.name}.`);
  5. }
  6. };
  7. person.introduce(); // 输出: My name is Alice.

作为构造函数调用

使用 new 关键字调用函数时,该函数会作为构造函数来创建一个新对象。

  1. function Animal(name) {
  2. this.name = name;
  3. this.speak = function() {
  4. console.log(`${this.name} makes a sound.`);
  5. };
  6. }
  7. const dog = new Animal('Dog');
  8. dog.speak(); // 输出: Dog makes a sound.

使用 callapplybind 调用

callapplybind 是函数对象的方法,它们可以改变函数内部 this 的指向。

  • call:第一个参数是 this 的值,后面的参数是函数的参数列表。
  • apply:第一个参数是 this 的值,第二个参数是一个数组,数组中的元素是函数的参数。
  • bind:返回一个新的函数,新函数的 this 值被绑定到指定的对象。
  1. function greetings(message) {
  2. console.log(`${message}, ${this.name}`);
  3. }
  4. const user = { name: 'Bob' };
  5. // 使用 call 调用
  6. greetings.call(user, 'Hello'); // 输出: Hello, Bob
  7. // 使用 apply 调用
  8. greetings.apply(user, ['Hi']); // 输出: Hi, Bob
  9. // 使用 bind 调用
  10. const boundGreet = greetings.bind(user);
  11. boundGreet('Hey'); // 输出: Hey, Bob

总结

函数定义方式 语法示例 特点
函数声明 function funcName(params) {... } 具有提升特性,可以在声明前调用
函数表达式 const funcName = function(params) {... }; 不会提升,需先定义后调用
箭头函数 const funcName = (params) => expression; 简洁,无自己的 thisarguments
构造函数方式 const funcName = new Function('param1', 'param2', 'function body'); 不常用,动态创建函数
函数调用方式 语法示例 特点
直接调用 funcName(params); 最常见的调用方式
作为对象方法调用 obj.methodName(params); 函数作为对象属性调用
作为构造函数调用 new ConstructorFunc(params); 创建新对象
使用 callapplybind 调用 func.call(thisValue, param1, param2); <br> func.apply(thisValue, [param1, param2]); <br> const newFunc = func.bind(thisValue); newFunc(params); 改变函数内部 this 指向

通过本文的介绍,相信你对 JavaScript 中函数的定义与调用有了更深入的理解。在实际编程中,根据不同的需求选择合适的函数定义和调用方式,可以让你的代码更加简洁、高效。