2.1.3 Lambda表达式
Lambda表达式(Lambda expression)在前端以箭头函数——一种匿名函数的表达形式出现。在ECMAScript标准中产生Lambda表达式,有助于开发者更好地解决函数直接声明调用和上下文透传的问题。
Lambda表达式基于函数式理论基础的λ演算。在演算的过程中,编程语言无须明确指代Lambda表达式代表的函数调用实体(变量名、锚定标识),因为它的理想状态是真正的匿名——我们不能直呼其名,也就不能在外部场合调用它。通过代码清单2-2可以看到,设计标准没有额外调用匿名函数获取arguments的能力。
代码清单2-2 Lambda表达式和arguments
const arguments = ["shadow"]; const callName = name => { console.log(arguments[0]); } const callRealName = function(name) { console.log(arguments[0]); } callName("knight"); // "shadow" callRealName("knight"); // "knight"
这样设计的好处在于,如果不考虑运算的次序(求值策略),写代码注释时可以使用函数式语言中更纯粹的匿名函数(Lambda表达式),在函数被调用(func()或箭头函数的自执行形式)的地方用函数体(箭头函数的内容部分)进行等价替换(即用函数的内容替换掉函数名赋予的变量)。
这种等价替换是函数代入(Lambda演算中的β-归约)这一概念在编程语言中较理想的体现。所以Lambda表达式可以做到上下文的透传,这也是本章将提到的纯函数这一理想状态的需求。