虽然未执行代码块,但函数已定义

时间:2012-03-06 15:25:16

标签: javascript

如果语言是德语,我使用以下代码来使用JS Gettext

if (lang == "de") {
    var gt = new Gettext({"domain": "tag_cloud", "locale_data": json_de_data});
    function _(ident) {
        console.debug('gt.gettext("'+ident+'")');
        return gt.gettext(ident);
    }
    console.debug("Using Gettext.");
}
else {
    function _(ident) {
        console.debug('return "'+ident+'"');
        return ident;
    }
    console.debug("Using no translation.");
}

在Firefox中,控制台显示:

Using Gettext.
gt.gettext("Ubiqitous, but effective.")

在所有其他浏览器(Chromiun,Opera,IE,rekonq,Safari)中,我得到了这个:

Using Gettext.
return "Ubiqitous, but effective."

我尝试删除else块,然后在所有浏览器中都有效,而不是英语。

虽然_()块没有被执行,但后者else是定义的吗?如何在所有浏览器中使用它?

1 个答案:

答案 0 :(得分:3)

function _(ident) {}函数声明将在运行时之前进行评估,这是在解析时。

您可以更改为var _ = function(ident) {},这样_将在运行时分配。

进一步阅读:Named function expressions demystified