我在javascript中使用了filter方法,我注意到如果使用大括号,它将返回undefined,但是如果删除了大括号,则会正确返回数组。有趣的是,使用数组过滤器方法时,Atom扩展会自动添加它们。
此代码有效:
const filterTest = (nums) =>
nums.filter(test)
const test = (el) => el % 2 == 1
const rain = [1, 2, 5, 7, 101, 9, 108, 12, 15, 19];
console.log(filterTest(rain))
第一个代码在不使用大括号的情况下有效,但是在代码块中添加大括号会产生未定义的含义。为什么会这样?
答案 0 :(得分:0)
箭头功能对于小型功能和IIFE非常方便,部分原因是这种带有花括号的细微行为。
没有花括号,箭头函数支持单个操作(即函数调用,数学运算等),并将该操作的输出作为函数的返回值返回。这使简单的单行代码变得容易编写和理解,因为您可以删除所有不必要的绒毛,而只留下函数的内容。
如果要在箭头函数定义中包含多个操作,则需要像普通函数定义一样添加大括号,然后包括return语句以定义要返回的操作。如果您在此处不包含返回值,则与没有返回值的普通函数相同。
换句话说,这是
let oneUpMe = (a) => { a + 1; }
// Braces enclose one or more statements like a normal function
实际上与
相同function oneUpMe(a) { let b = a + 1; b; }
// But on its own, just calling b does nothing; same with a+1 in the previous example.
因为没有return语句,所以内部的工作永远不会返回,但是
let oneUpMe = (a) => a + 1;
将返回正确的结果,因为如果不使用大括号且仅包含一条语句,则将暗示return语句。
答案 1 :(得分:0)
简单地:
var a = () => 0
// without brackets it means return the value after the arrow
var b = () => {console.log(0);return0}
// with brackets is the same as the default function declaration
// which works exactly like
function b(){console.log(0);return0}