函数参考和"内联"功能声明

时间:2015-09-28 16:45:03

标签: javascript

我有一个场景,我可以传递一个函数或已经声明它。由于函数本身不会在其他任何地方使用,我计划使用匿名函数,但它不起作用,所以任何帮助都将非常感激。

就像现在一样:

function connectStatic(connect, dir) {
  return connect.static(require('path').resolve(dir));
}

// ...
middleware: function (connect) {
  return [proxySnippet, connectStatic(connect, './')];
}
// ...

正如我所希望的那样:

// ...
middleware: function (connect) {
  return [proxySnippet, function () {
    return connect.static(require('path').resolve('./'));
  }];
// ...

无论如何,如果我这样做:

// ...
middleware: function (connect) {
  return [proxySnippet, connect.static(require('path').resolve('./'))];
// ...

......它会起作用,但我想知道为什么它没有功能声明。

2 个答案:

答案 0 :(得分:2)

你实际上并没有调用你的匿名函数,而在“工作”版本中,你是:

middleware: function (connect) {
  return [proxySnippet, function () {
    return connect.static(require('path').resolve('./'));
  }()];  // <--- change here
}

现在,鉴于匿名包装函数没有真正做任何事情,你应该能够摆脱它:

middleware: function (connect) {
  return [proxySnippet, connect.static(require('path').resolve('./'))];
})

答案 1 :(得分:2)

您需要调用匿名函数:

middleware: function (connect) {
  return [proxySnippet, (function () {
    return connect.static(require('path').resolve('./'));
  }())];

为了帮助提高可读性,我将您的匿名函数包含在可选的附加级别中。

这是一篇文章,其中包含有关自动执行功能的更多信息:http://markdalgleish.com/2011/03/self-executing-anonymous-functions/