我努力拥有单一责任的consise功能,但我经常会有这样的功能:
logic part1 (~5 lines of code)
logic part2 (~5 lines of code)
return (the results of part1 and part2)
在JavaScript中,我发现这种编程风格非常自我宣传且易于阅读(可能在AMD风格的环境中):
performCalculation: function() {
function part1() {
// 5 lines of code
return ...
}
function part2() {
// 5 lines of code
return ...
}
return part1() + part2();
}
这是好形式吗? 或者,正在使用" function foo(){} "笨重?
答案 0 :(得分:2)
如果要与本地代码块进行比较,则JS中的函数调用相当昂贵。请查看此http://jsperf.com/anonymous-vs-named-function-passing/3例如
我不知道这是怎么回事。
performCalculation: function() {
var part1; {
// 5 lines of code
part1 = ...;
}
var part2; {
// 5 lines of code
part2 = ...
}
return part1 + part2;
}
比你的更糟糕。
答案 1 :(得分:1)
你似乎在问两个问题:
将逻辑分解为更小的函数并将它们组合起来是一个好主意吗?
使用var f=function(
或function f(
更好吗?
关于第一点,是,是,是的。这使您的代码更易于阅读,提供了一种自我文档形式,并且更易于维护和扩展。
@ c-smile指出函数调用的成本。好吧,如果我们要担心函数调用的成本,我们都会编写500行函数。这应该是你最不担心的事情。担心的主要“成本”不是CPU时间,而是编写,调试和维护代码的人力时间。我担心函数调用开销只有在紧密循环中调用函数1M次时(但在很多情况下,JIT可能会为我内联它)。他引用的jsperf不是苹果对苹果。 reduce会做各种检查,处理稀疏数组等等。当然它仍然会更慢,但那又是什么。
关于第二点,这里已经得到了很好的解答,请参阅var functionName = function() {} vs function functionName() {}。
答案 2 :(得分:0)
从本质上讲,您正在创建您不希望他人使用的私人功能。 从面向对象的角度来看,这是有效的。有关私有函数及其用法的更多详细信息,请参阅this stackoverflow答案。
关于&var;函数名称' vs'功能函数名称' this回答有很好的论据。
答案 3 :(得分:-1)
使用函数声明格式的一大优点是,您可以利用函数提升的唯一用途。
performCalculation: function() {
// What's key here is that the calculation is part1 + part2
// not the details of implementation so put that first
return part1() + part2();
function part1() {
// 5 lines of code
return ...
}
function part2() {
// 5 lines of code
return ...
}
}
更好
//someone reading your module likely wants to know what it's returning
//and what its major parts are, so show that at the top of the file
return {
performCalculation: performCalculation
}
//...
function performCalculation() {
return part1() + part2();
//these can now go outside of performCalcuation if that makes it look nicer.
function part1() {
// 5 lines of code
return ...
}
function part2() {
// 5 lines of code
return ...
}
}