Yuan的博客
EN

箭头函式、高阶函式、立即调用函式

什么是箭头函式 (Arrow Function)?跟一般的函式有什么差别?

  • 箭头函式语法不同、写法也较简洁,少去 function 关键字,如果只有一个参数,箭头函式可以省略括号;只有一行程式码,就是直接简单返回一个变数或简单的表达式,可以省略大括号和 return。
  • 箭头函式没有自己的 this、也无法直接修改 this 的指向
  • 箭头函式没有自己的 arguments,箭头函式可以获取最近的非箭头函式的 arguments 物件
  • 箭头函式不能作为构造函式使用,换言之不能用 new 关键字调用,会报错

JavaScript 立即调用函式 IIFE (Immediately Invoked Function Expression) 是什么?优缺点是什么?

  • 在定义时立即执行的匿名函式,通常用于创建一个局部作用域,避免全局污染。函式定义与函式调用的括号是一起的,确保函式只会被执行一次,而不是定义后可以多次执行。
(function () {
  // Code to be executed
})();
  • 常见例题
for (var i = 1; i <= 5; i++) {
  setTimeout(function () {
    console.log(i);
  }, 0);
}

// 立即输出五个 6
6;
6;
6;
6;
6;
for (const i = 1; i <= 5; i++) {
  setTimeout(function () {
    console.log(i);
  }, 0);
}

// 立即输出五个 6
1;
2;
3;
4;
5;
  • 解释:var 共享的是同一个变量引用,所以闭包看到的是“最后一次写入”的值。 let 每次循环创建新的变量,所以闭包看到的是“当轮绑定的值”。闭包捕获的是“变量绑定”(environment binding),不是“值快照”。

什么是高阶函式 (Higher order function)?使用高阶函式有什么好处?

  • 高阶函式 (Higher order function)是指当一个函式可以接受另一个函式作为参数、或者返回一个函式作为结果的函式。
  • map的原理
function map(arr,callback) {
  const result = [];
  for(let i=0;i<arr.length;i++){
    const item=arr.i;
    result.push(callback(item));
  }
  return result;
}