JavaScript 函数

JavaScript 函数是代码执行的基本单元,具有灵活的定义方式和强大的功能特性。以下是核心要点:


一、定义方式

类型 语法 特性
函数声明 function fn() { ... } 存在变量提升,可在定义前调用
函数表达式 const fn = function() {...} 无变量提升,需先定义后调用
箭头函数 const fn = () => { ... } thisarguments,不能作为构造函数
构造函数 new Function('a','b','return a+b') 动态创建,性能较低,慎用
// 函数声明(可提前调用)
console.log(add(2,3)); // 正常输出 5
function add(a,b) { return a + b; }

// 函数表达式(不可提前调用)
const multiply = function(a,b) { return a * b; };

二、核心特性

  1. 一等公民
    函数可作为参数传递、返回值或赋值给变量:

    // 高阶函数示例
    function operate(fn, a, b) {
      return fn(a, b);
    }
    operate((x,y) => x / y, 6, 2); // 返回 3
    
  2. 作用域与闭包
    函数内部可访问外部作用域,形成闭包:

    function counter() {
      let count = 0;
      return () => ++count;
    }
    const inc = counter();
    inc(); // 1
    inc(); // 2 (闭包保留count状态)
    
  3. 参数处理

    • 默认参数function log(msg = "default") { ... }
    • 剩余参数function sum(...nums) { return nums.reduce((a,b)=>a+b) }
  4. this 绑定
    普通函数中 this 由调用方式决定,箭头函数继承外层 this

    const obj = {
      value: 10,
      normalFn: function() { console.log(this.value) }, // 输出 10
      arrowFn: () => console.log(this.value)            // 输出 undefined(假设外层无value)
    };
    

三、注意事项

  1. 严格模式
    使用 'use strict'; 避免隐式全局变量等错误:

    function strictFn() {
      'use strict';
      undeclaredVar = 42; // 抛出 ReferenceError
    }
    
  2. 内存管理
    不当使用闭包可能导致内存泄漏:

    // 不良实践(大型数据未释放)
    function createHeavyClosure() {
      const bigData = new Array(1e6).fill("*");
      return () => console.log(bigData.length);
    }
    
  3. 性能优化
    避免在热代码路径中频繁使用 arguments 对象或动态创建函数。


四、ES6+ 增强

  • 生成器函数:通过 function* 定义,支持暂停执行
  • 异步函数async/await 简化异步操作
  • 参数解构function render({ x, y }) { ... }

掌握这些特性可显著提升代码质量与开发效率。

你可能感兴趣的:(JavaScript,教程,javascript,开发语言,ecmascript)