Javascript中的函数如何定义与调用?

JavaScript函数定义分声明、表达式和箭头函数:声明会被提升且必须具名;表达式不提升,可匿名或具名;箭头函数无this绑定;调用均为fn(...)形式,IIFE需括号包裹后立即执行。

JavaScript 中的函数可以通过多种方式定义,调用方式也因定义形式略有不同,核心在于理解“声明”和“表达式”的区别,以及函数是否具名。

函数声明(Function Declaration)

使用 function 关键字 + 函数名 + 参数列表 + 函数体来定义,会被提升(hoisted),可在定义前调用:

  • 语法:function sayHello(name) { return 'Hello, ' + name; }
  • 调用直接写函数名加括号:sayHello('Alice');
  • 注意:函数名是必需的,不能省略

函数表达式(Function Expression)

把函数赋值给一个变量,常见于 const/let/var 声明中,不会被提升,必须先定义再调用:

  • 语法:const add = function(a, b) { return a + b; };
  • 调用:add(2, 3); // 5
  • 可选具名(用于调试或递归):const factorial = function fact(n) { return n

箭头函数(Arrow Function)

ES6 引入的简洁写法,没有自己的 thisarguments,也不能作为构造函数:

  • 单参数可省括号,单表达式可省大括号和 return:const square = x => x * x;
  • 多参数或复杂逻辑需括号和花括号:const greet = (name, time) => { return `Good ${time}, ${name}!`; };
  • 调用方式和其他函数一致:square(4); // 16

立即执行函数(IIFE)与调用时机

定义后立刻运行,常用于创建私有作用域:

  • 写法:(function() { console.log('run once'); })();((x) => console.log(x))(123);
  • 注意括号位置:函数体外加小括号,调用时再加一对小括号
  • 箭头函数不能直接 IIFE(需额外包裹),例如:((x) => x * 2)(5);

基本上就这些。定义看场景选声明、表达式或箭头函数;调用统一用 fn(...) 形式,关键在别混淆提升行为和 this 绑定规则。