8.4 lambda表达式

lambda表达式又称为箭头函数。
ES6中的 Lambda 表达式即箭头函数,提供了一种快速简洁的语法方式来声明函数。箭头函数可以使用更短的语法来声明匿名函数,并且不需要显式地声明 `this` 和 `arguments` 参数。下面是一些常用的Lambda 表达式示例:
1. 基本语法
JavaScript传统的函数声明语法:
function add(x, y) {
  return x + y;
}
z=add(3,7);
console.log(z);
add函数是加法,这段代码运行后会打印z的值10。
使用Lambda表达式语法,就变成了这样:
const add = (x, y) => x + y;
z=add(3,7);
console.log(z);
可以看到代码得到了很大的简化。add这个时候是一个函数对象。

2. 简单的函数调用
map是一个筛选器,数组arr的所有元素都会调用符合map的函数,最后arr的数值放大了一倍。
var arr=[1,2,3];
arr=arr.map(function(n){
    return n*2;
});
console.log(arr);
如果用lambda来写这一段,那就变成了:
var arr=[1,2,3];
arr=arr.map((n)=>n*2);
console.log(arr);

3. Lambda 表达式与 this 关键字
// #this 的值在传统函数中会受调用方式的不同而发生变化
const myObject = {
  value: 100,
  getValue: function () {
    console.log(this.value); // #输出 100
    setTimeout(function () {
      console.log(this.value); // #输出 undefined
    }, 1000);
  },
};
myObject.getValue(); 
// #使用 Lambda 表示式,this 的值是在声明时就被捕获的
const myObject2 = {
  value: 100,
  getValue: function () {
    console.log(this.value); // #输出 100
    setTimeout(() => {
      console.log(this.value); // #输出 100
    }, 1000);
  },
};
4. Lambda 表达式与解构
const data = [
  { name: "Alice", age: 23 },
  { name: "Bob", age: 32 },
  { name: "Charlie", age: 18 },
];
// #传统函数与解构
const names1 = data.map(function (item) {
  return item.name;
});
// #Lambda 表达式与解构
const names2 = data.map(({ name }) => name);