我是JavaScript的新手,目前正在学习写作功能的简写。我刚学习时遇到过这个问题:
const groceries = (groceryItem) => ' - ' + groceryItem;
在现实世界中编写这样的函数是否可接受/最佳实践? (没有回报,没有括号)我注意到扩展可能很烦人。或者这只是标准做法?
我也注意到没有括号的语句。也是标准做法?
我想早点学习好习惯,所以对此事的任何建议都会非常感激。
答案 0 :(得分:1)
有几种方法可以声明函数,每种方法都有用例和优缺点。因此,没有"首选"方式即可。根据您的具体情况使用适当的语法。
以下是设置功能的不同方法的摘要,并简要说明每种功能。单击标题链接以指向该类型的更深入资源:
<强> Function Declaration 强>:
function foo(){
}
使用函数声明,整个函数将被提升(无论它在代码中的实际位置如何)到封闭范围的顶部。这使得可以在声明点之前调用该函数。
<强> Function Expression 强>:
var foo = function(){
}
函数表达式只是将函数(作为数据)赋给变量的变量声明。与函数声明一样,此处也存在提升,但只有变量(此示例中为foo
)声明才会被提升,而不是赋值,因此在这种情况下,您无法在声明之前调用该函数。
<强> Arrow Functions 强>:
const groceries = (groceryItem) => ' - ' + groceryItem;
这只是一种简短的语法,而不是使用函数表达式。但是,箭头功能有所不同。使用箭头函数时,this
绑定到的对象在函数内不受影响,而在非箭头函数中受影响。
<强> Immediately Invoked Function Expression 强>:
(function(){
})();
立即调用函数表达式(IIFE)是一个匿名函数(一个没有名称的函数),它通过用括号括起来变成表达式,然后立即用另一组括号调用。此语法在JavaScript中非常常见,用于创建与其他范围不冲突的scope。
注意:强>
Functions 是JavaScript的工作,根据您设置和调用它们的方式,它们可以执行许多不同的操作:
答案 1 :(得分:0)
是的,我认为这被认为是可以接受的,因为箭头功能是专门设计的。箭头函数的一个特性是它们允许将非常简单的函数写成这样的单行。当您可以将返回值计算为单个表达式时,您无需在其周围使用大括号或return
语句明确地编写主体。这使得传统函数不必要地冗长,具有比函数的实际代码更多的样板。传统的替代方案如下:
const groceries = function(groceryItem) {
return ' - ' + groceryItem;
}
在定义命名函数时,这并不是那么糟糕,但是当您使用匿名函数作为回调时,所有这些详细程度都可能会模糊意图。比较:
newarray = oldarray.map(function(x) {
return x * x;
}
使用:
newarray = oldarray.map(x => x * x);
箭头功能是该语言的最新成员,因此我认为我们可以假设该设计得到了重视。如果Javascript社区不认为像这样的速记函数是个好主意,那么它们就不会被允许了。
答案 2 :(得分:-1)
The function you wrote is what is commonly known as a "arrow function". They can prove very useful when you get to a somehow more advanced level in JavaScript and there is absolutely nothing wrong with them. On the contrary. Very commonly used with "higher order functions" for arrays, to give an example.