JavaScript 函数


关键要点

  • JavaScript 函数是可重复调用的代码块,用于执行任务或计算值。
  • 函数可以通过声明(如 function name() {})或表达式(如 const func = function() {})定义。
  • 函数支持参数传递,包括默认参数和剩余参数。
  • 函数有自己的作用域,内部变量为局部变量。
  • 闭包允许内部函数访问外部函数的变量。
  • 箭头函数提供简洁语法,适合简单操作。

函数的定义

JavaScript 函数是一段可重复调用的代码,用于执行特定任务或计算值。函数可以接受输入(参数)和返回输出(返回值),类似于过程,但必须与输入有明显关系。

定义方式

  • 函数声明:使用 function 关键字定义,语法为 function name(parameters) { code }。例如:
  function square(number) {
    return number * number;
  }

函数声明会被提升,可以在定义前调用。

  • 函数表达式:将函数赋值给变量,可以是匿名函数或命名函数(用于递归)。例如:
  const square = function(number) {
    return number * number;
  };

函数表达式不会被提升,必须在定义后调用。

  • 自调用函数:函数表达式可以立即执行,例如:
  (function() {
    var x = "Hello!!";
  })();

参数与返回值

  • 函数可以接受参数,参数是按值传递的,但对象和数组是引用类型,修改会影响外部。
  • 使用 return 语句返回值,若无 return,默认返回 undefined

函数作用域与闭包

  • 函数有自己的作用域,内部变量为局部变量,仅在函数内有效。例如:
  function myFunction() {
    var carName = "Volvo";
    console.log(carName); // 输出 "Volvo"
  }
  • 闭包是函数与其词法环境的组合,内部函数可以访问外部函数的变量。例如:
  function makeFunc() {
    var name = "Mozilla";
    function displayName() {
      console.log(name);
    }
    return displayName;
  }
  var myFunc = makeFunc();
  myFunc(); // 输出 "Mozilla"

箭头函数

箭头函数(ES6 引入)提供简洁语法,不绑定自己的 this,适合简单操作。例如:

const a3 = a.map((s) => s.length);
  • 单参数可省略括号:x => x * 2
  • 无参数需用空括号:() => console.log("Hello")
  • 单行返回可省略 returnx => x * 2

高级特性

  • 函数是一等公民,可以像值一样传递、返回和赋值。例如:
  function myFunction(a, b) {
    return a * b;
  }
  var x = myFunction(4, 3); // x 为 12
  • 支持递归,如计算阶乘:
  function factorial(n) {
    if (n === 0) return 1;
    return n * factorial(n - 1);
  }
  factorial(5); // 返回 120

调查笔记:JavaScript 函数的详细分析

JavaScript 函数是语言的核心特性之一,用于组织代码、提高复用性和模块化。以下是基于权威资料的详细分析,确保覆盖所有相关信息。

函数的定义与分类

根据 MDN Web Docs,函数是可通过外部代码调用的子程序,类似于过程,但必须接受输入并返回输出。函数是头等对象(first-class objects),可以具有属性和方法,并可以被调用。

定义方式
  • 函数声明
  • 语法:function name(parameters) { code }
  • 示例:function square(number) { return number * number; }
  • 特性:会被提升(hoisting),可以在定义前调用。例如:
    javascript console.log(square(5)); // 输出 25 function square(number) { return number * number; }
  • 来源:MDN Web Docs: Function Declarations
  • 函数表达式
  • 语法:const func = function(parameters) { code };
  • 可以是匿名函数或命名函数(用于递归)。例如:
    javascript const factorial = function fac(n) { return n < 2 ? 1 : n * fac(n - 1); };
  • 不会被提升,必须在定义后调用。
  • 来源:Runoob: JavaScript 函数表达式
  • Function() 构造器
  • 使用 Function() 创建函数,但不推荐使用 new。例如:
    javascript var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3); // x 为 12
  • 来源:Runoob: Function() 构造器
  • 自调用函数
  • 函数表达式可以立即执行,例如:
    javascript (function() { var x = "Hello!!"; })();
  • 不能用于函数声明。
  • 来源:Runoob: 自调用函数

参数与返回值

  • 参数传递
  • 参数按值传递,但对象和数组是引用类型,修改会影响外部。例如:
    javascript function changeObj(obj) { obj.make = "Toyota"; } var mycar = { make: "Honda" }; changeObj(mycar); console.log(mycar.make); // 输出 "Toyota"
  • 来源:MDN Web Docs: Parameter Passing
  • 默认参数
  • ES6 引入,语法:function name(param = defaultValue) {}。例如:
    javascript function multiply(a, b = 1) { return a * b; } console.log(multiply(5)); // 输出 5
  • 来源:MDN Web Docs: Default Parameters
  • 剩余参数
  • 使用 ... 表示,允许接受不定数量的参数。例如:
    javascript function multiply(multiplier, ...theArgs) { return theArgs.map(x => multiplier * x); } console.log(multiply(2, 1, 2, 3)); // 输出 [2, 4, 6]
  • 来源:MDN Web Docs: Rest Parameters
  • 返回值
  • 使用 return 语句返回值,若无 return,默认返回 undefined。例如:
    javascript function noReturn() {} console.log(noReturn()); // 输出 undefined
  • 来源:W3School: Return Statement

作用域与闭包

  • 作用域
  • 函数有自己的作用域,内部变量为局部变量,仅在函数内有效。例如:
    javascript function myFunction() { var carName = "Volvo"; console.log(carName); // 输出 "Volvo" } myFunction(); console.log(carName); // 报错:carName 未定义
  • 来源:W3School: Local Variables
  • 闭包
  • 闭包是函数与其词法环境的组合,内部函数可以访问外部函数的变量。例如:
    javascript function makeFunc() { var name = "Mozilla"; function displayName() { console.log(name); } return displayName; } var myFunc = makeFunc(); myFunc(); // 输出 "Mozilla"
  • 闭包常用于数据私有化或保持状态。
  • 来源:MDN Web Docs: Closures

箭头函数

  • 箭头函数(ES6 引入)提供简洁语法,不绑定自己的 this,适合简单操作。语法:
  • 单参数:x => x * 2
  • 无参数:() => console.log("Hello")
  • 多参数:(x, y) => x + y
  • 示例:
  const a3 = a.map((s) => s.length);
  • 特性:不能被提升,建议使用 const 定义;不支持 IE11 及更早版本。
  • 来源:Runoob: 箭头函数

高级特性

  • 函数作为一等公民
  • 函数可以像值一样传递、返回和赋值。例如:
    javascript function myFunction(a, b) { return a * b; } var x = myFunction(4, 3); // x 为 12 var y = myFunction(4, 3) * 2; // y 为 24
  • 来源:MDN Web Docs: Functions as First-Class Citizens
  • 递归
  • 函数可以调用自身,用于解决复杂问题。例如,计算阶乘:
    javascript function factorial(n) { if (n === 0) return 1; return n * factorial(n - 1); } console.log(factorial(5)); // 输出 120
  • 来源:MDN Web Docs: Recursion
  • 内置函数
  • JavaScript 提供了一些全局函数,如 eval()isFinite()isNaN()parseFloat()parseInt()encodeURI() 等。
  • 示例:parseInt("10") 返回 10。
  • 注意:escape()unescape() 已弃用。
  • 来源:MDN Web Docs: Global Objects

总结表

以下是 JavaScript 函数关键特性的总结表:

特性描述
定义方式声明(function)、表达式、构造器、自调用
参数传递按值传递,对象/数组为引用类型
默认参数ES6 引入,param = defaultValue
剩余参数使用 ...,接受不定数量参数
作用域函数有独立作用域,内部变量为局部
闭包内部函数访问外部变量,形成词法环境引用
箭头函数简洁语法,无 this,不支持提升
一等公民可传递、返回、赋值
递归函数自调用,解决复杂问题
内置函数eval()parseInt(),部分已弃用

信息来源与可靠性

本文信息基于以下权威资料,确保准确性和全面性:

这些资料一致性高,涵盖了 ES6 及以上版本的最新特性,确保信息的时效性。


关键引用


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注