JavaScript函数定义分声明、表达式和箭头函数:声明会被提升且必须具名;表达式不提升,可匿名或具名;箭头函数无this绑定;调用均为fn(...)形式,IIFE需括号包裹后立即执行。
JavaScript 中的函数可以通过多种方式定义,调用方式也因定义形式略有不同,核心在于理解“声明”和“表达式”的区别,以及函数是否具名。
使用 function 关键字 + 函数名 + 参数列表 + 函数体来定义,会被提升(hoisted),可在定义前调用:
function sayHello(name) { return 'Hello, ' + name; }
sayHello('Alice');
把函数赋值给一个变量,常见于 const/let/var 声明中,不会被提升,必须先定义再调用:
const add = function(a, b) { return a + b; };
add(2, 3); // 5
const factorial = function fact(n) { return n
ES6 引入的简洁写法,没有自己的 this、arguments,也不能作为构造函数:
const square = x => x * x;
const greet = (name, time) => { return `Good ${time}, ${name}!`; };
square(4); // 16
定义后立刻运行,常用于创建私有作用域:
(function() { console.log('run once'); })(); 或 ((x) => console.log(x))(123);
((x) => x * 2)(5);
基本上就这些。定义看场景选声明、表达式或箭头函数;调用统一用 fn(...) 形式,关键在别混淆提升行为和 this 绑定规则。