【发布时间】:2017-12-04 18:22:15
【问题描述】:
在没有 ES6 的 JS 中工作的简单函数:
var evenOrOdd = function(n){
if(n % 2 == 1){
return "Odd";
} else {
return "Even";
}
}
console.log(evenOrOdd(3)); //returns odd
我尝试使用 ES6 进行重构:
const evenOrOdd = (n) => {(n % 2 == 1) ? "Odd" : "Even"};
console.log(evenOrOdd(3)); //returns undefined
为什么这个箭头函数返回undefined?
【问题讨论】:
-
我还尝试将 const 替换为 var 和 let(只是为了看看),但没有任何改变。
-
去掉函数体周围的
{...}。但是,这与 TCO 无关,因为您的函数不会调用另一个函数。 -
哦,有趣。我以为 TCO 是?和:--我正在学习。那这叫什么?只是优化?我如何给你“功劳”以帮助我?
-
... ? ... : ...是conditional operator。如果在尾部位置存在 函数调用(基本上意味着函数调用是另一个函数中的最后一个操作),则 TCO 是运行时可以执行的操作。 IE。要使 TCO 发生,必须重构他们的代码以将函数调用置于尾部位置。但这与条件运算符无关。再说一次,不存在任何 TCO,因为您的函数没有调用另一个函数。 -
TCO 在 recursive 函数的上下文中很有用。在您的示例中,将代码从
if语句更改为条件运算符只是“重构”代码。
标签: javascript optimization ecmascript-6