2012-03-06 64 views
2

如果語言是德語,則使用以下代碼以使用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.") 

在其他瀏覽器(鉻含量,歌劇,IE,rekonq,Safari瀏覽器),我得到這個:

Using Gettext. 
return "Ubiqitous, but effective." 

我試着刪除else塊,然後在所有瀏覽器中工作,但不適用於英語。

那麼後者_()定義雖然else塊沒有執行?我如何在所有瀏覽器中完成這項工作?

回答

3

function _(ident) {}函數聲明將在運行時間之前進行評估,該時間位於分析時間。

您可以更改爲var _ = function(ident) {},這種方式_將在運行時分配。

獲得進一步閱讀:Named function expressions demystified

+0

好的,這很有趣。我想這是Firefox的Javascript引擎中的一個錯誤呢? – 2012-03-06 15:39:04

+0

第一種方法是依賴於瀏覽器,因此您應該使用第二種方法'var _ = function(ident){}'。 – xdazz 2012-03-06 15:47:04

+0

總是使用第二種方式或只是在這樣的關鍵功能? – 2012-03-06 16:07:50

相關問題