我应该何时将函数存储到变量中?

imj*_*mjp 41 javascript node.js

我目前正在学习JavaScript,我不太明白何时将函数写入变量.

例如,以下两个代码块在Node.js中执行完全相同的操作:

 var onReq = function(req, res) {
   res.write('Hello');
 };

 http.createServer(onReq).listen(3000);
Run Code Online (Sandbox Code Playgroud)

function onReq(req, res) {
   res.write('Hello');
 }

 http.createServer(onReq).listen(3000);
Run Code Online (Sandbox Code Playgroud)



根据最佳实践,哪种方法最好?为什么?

Bra*_*tie 22

通常我只会var funcName = function(){}在以后需要重新定义该函数的动作时使用.例如:

var foo = function(a){ return a * 2; }
var bar = foo(2);

foo = function(a){ return a / 2; }

bar = foo(bar);
Run Code Online (Sandbox Code Playgroud)

否则,对于大多数目的(假设它不是回调或修饰符),通常可接受声明"经典"的函数.


Sup*_*upr 12

我默认使用非变量function onReq(){}版本.这不是我做出的一个有说服力的决定,但是考虑它会带来这些论点:

  • 它看起来更干净.
  • 它在概念上更简单:它只是一个函数,而另一个是函数和变量.这是一件小事,但我发现它很有价值.
  • 它向我保证onReq将始终引用函数体 - 在阅读代码时要少考虑一件事.有点像final在Java中标记变量.
  • 让我"不小心"更换功能,在其他地方造成意外的副作用.


Egg*_*gon 7

我发现没有人提到(直接和实际地 - 这似乎是这个问题的目的)我个人认为在变量中存储函数最有用的原因。这个原因是处理一个复杂的逻辑,需要很多选择(例如if)来确定应该调用不同函数的进一步行动方案,也可能使用不同的输入集。当进一步的操作仅在逻辑末尾的一个地方启动时,它会使代码更清晰。

function fooA (input) {...};
function fooB (input) {...};
let chosenHandler;
let chosenInput;

// Here we establish which function is relevant
if (someCondition) chosenHandler = fooA;
else chosenHandler = fooB;

// Here we establish which parameter should be used
if (someOtherCondition) chosenInput = 'First input';
else chosenInput = 'Second input';

// Call chosen function with chosen parameters - one place, nice and clean
chosenHandler(chosenInput);
Run Code Online (Sandbox Code Playgroud)

如果我们尝试直接调用函数,代码会变得更加混乱,而且逻辑越复杂,代码就越混乱。