如何在一行中将 iife old ways 函数转换为箭头函数

How to convert an iife old ways function to an arrow function in a single line

你会如何转换:

(function(age) {return `your ${age}`;
})(10);

箭头函数?我试过但没有用:

(const years = (age) => `your ${age}`)(10);

为什么不起作用,如果是因为 const?

再举一个例子,如果我做:

const marco= { name: 'marco ccc',
  say hi: function () {
  return 'something';
  }
}

如何将 sayHi 转换为箭头函数?

表达式被分配给变量。箭头函数通常由两部分组成:分配给它的变量和函数体,例如:

const foo = () => { ... }
// ^ variable
            ^^^^ function body

变量的初始化只能作为语句在独立的行上完成; const 不能在括号内。您只需要将 return 值分配给的变量与(函数体 函数的调用)分开:

const years = ((age) => `your ${age}`)(10);
//             ^^^^^^^^^^^^^^^^^^^^^^
//             this is the function body
//             that needs to be invoked immediately
//                                     ^^ with the (10)
//    ^^^^^    with the result assigned to `years`
console.log(years);

在对象中,只需将 function() 替换为 () =>(并注意 say hi 不是对象字面量中的有效对象 属性 - 要么将其包围在引号中,或者使用一个词代替):

const marco = {
  name: 'marco ccc',
  sayHi: () => {
    return 'something';
  }
};

console.log(marco.sayHi());

我在创建异步闭包时经常这样做,因此我可以在非异步函数体内使用 await。它看起来像这样:

(async (arg1,arg2) => {
  console.log(arg1,arg2); // logs a,b
})('a','b');

它让我免于创建 const 然后调用它,就像这样:

const outerFunc = () => {

   // ... some code

   const innerFunc = async () => {
      // I can use await in here
   };
   innerFunc();
}

而我这样做:

const outerFunc = () => {

   // ... some code

   (async () => {
      // I can use await in here
   })();
}

为了创建闭包,省略异步部分

((...args) => console.log(...args))('a','b');

编辑:如果您仔细查看上面的内容,您会发现它实际上缩短为

(console.log)('a','b')

所以基本上我想转换这两个函数(旧版本):

(function(age) {return `your ${age}`;
})(10);

const marco= { name: 'marco ccc',
  say hi: function () {
  return 'something';
  }
}

console.log(marco.sayHi());

转换的分别是:

((age) => your age is ${age})(10);

const marco= { name: 'marco ccc', sayHi: () => {} }

但除此之外,我试图了解 IIFE 的好处,例如:

const years = ((age) => your ${age})(10); 

是一个比以下内容更短的版本:

const years = (age) => your ${age}; 
const whatever = years(10); 
console.log(whatever);