声明后执行命名函数

xia*_*kai 6 javascript

我知道这可以用于匿名函数

(function toBeExecutedImmediately() {
    // Code
}());
Run Code Online (Sandbox Code Playgroud)

我有一个我希望在其他地方使用的功能,但也应该立即执行.是否可以使用一个语句而不是以下语句来执行此操作?不需要返回值.

function toBeExecutedImmediately() {
    // Code
};

toBeExecutedImmediately();
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 4

是否可以用一条语句而不是以下语句来完成此操作?

不。正如您所发现的,命名函数表达式(您的第一个示例)不会将名称添加到包含范围(除了损坏的引擎 - 我正在看着您,IE8 及更早版本),所以您不能在其他地方调用该函数而不做任何事情来使其成为可能,当然,使用函数声明(您的第二个示例),您必须给出两次名称。

您最好的选择可能是继续进行声明和单独的调用(您的第二个示例)。

我们可能会想出一些在技术上符合“单一声明”定义的复杂内容,但它不太可能更短。

如果简洁是您的目标,那么这是两个简短的陈述:

var f = function() {
    // Code
}, toBeExecutedImmediately = f;
f();
Run Code Online (Sandbox Code Playgroud)

但虽然相对简短,但我想说的是清晰度受到了影响。:-)

当然,如果添加辅助函数,一切皆有可能。例如:

// The helper
function defineAndExecute(f) {
    f();
    return f;
}

// using it
var toBeExecutedImmediately = defineAndExecute(function() {
    // Do work here
});
Run Code Online (Sandbox Code Playgroud)

该函数在技术上是匿名的,但您可以通过var. (您也可以在这里使用命名函数表达式,但当然这会达不到目标——不重复名称——据我所知。)


旁注:您的第一个示例不是“匿名函数”。该函数有一个专有名称,它是一个命名函数表达式。只是与函数声明不同的是,对于命名函数表达式,该名称不会添加到包含范围中。