如何在一行中将 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);
你会如何转换:
(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);