javascript - 声明后执行命名函数

标签 javascript

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

(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/

相关文章:

javascript - 访问 salesforce 外部的 ajax 工具包

javascript - 大约 2 分钟后,Webaudio 声音在 Chrome for Android 上停止

javascript - 使用 jquery 从 URL 获取值,而不是 php

javascript - 如何在Jquery/js中设置div的order by条件?

javascript - 在所有浏览器中使用 window.opener 的问题

javascript - 从 iPhone 网站发起电话调用

javascript - 如何检查 Polymer 中的所有页面是否已完全加载

javascript - 无法分配给的只读属性 '_id'

javascript - angular ng-app Controller 注入(inject)

javascript - 更改 anchor 以指向页面的 data-url 属性?