我知道这可以用于匿名函数
(function toBeExecutedImmediately() {
// Code
}());
我有一个函数想在其他地方使用,但也应该立即执行。是否可以用一个语句而不是下面的语句来做到这一点?不需要返回值。
function toBeExecutedImmediately() {
// Code
};
toBeExecutedImmediately();
最佳答案
Is it possible to do it with one statement instead of the following?
没有。正如您所发现的,命名函数表达式(您的第一个示例)不会将名称添加到包含范围(broken engines 除外 - 我在看你,IE8 和更早版本) , 所以你不能在不做任何事情的情况下在别处调用该函数,当然对于函数 declaration (你的第二个例子),你必须给出两次名称。
您最好的选择可能是继续进行声明和单独调用(您的第二个示例)。
我们可能会想出一些复杂的东西,在技术上符合“单一声明”的定义,但它不太可能更短。
如果简洁是您的目标,这是两个陈述,但很简短:
var f = function() {
// Code
}, toBeExecutedImmediately = f;
f();
虽然相对简短,但我想说清晰度会受到影响。 :-)
当然,如果添加辅助函数,一切皆有可能。例如:
// The helper
function defineAndExecute(f) {
f();
return f;
}
// using it
var toBeExecutedImmediately = defineAndExecute(function() {
// Do work here
});
该函数在技术上是匿名的,但您可以通过 var
调用它。 (你也可以在这里使用命名函数表达式,但当然这会破坏目标——不重复名字——据我所知。)
旁注:您的第一个示例不是“匿名函数”。该函数有一个专有名称,它是一个已命名 函数表达式。只是与函数声明不同,命名函数表达式不会将该名称添加到包含范围。
关于javascript - 声明后执行命名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752334/