javascript内联回调函数来分隔函数

时间:2013-05-29 08:35:44

标签: javascript jquery

为什么这段代码有效:

function onCordovaReady() { 
    navigator.globalization.getLocaleName(function (locale) {
        jQuery.i18n.properties({
            name:'message', 
            path:'lang/', 
            mode:'map',
            language:locale.value,
            callback: function(){
                alert(locale.value);
                alert(jQuery.i18n.prop('msg_hello'));
                alert(jQuery.i18n.prop('msg_complex', 'John'));
            }
        });
    });
}

这不是:

function onCordovaReady() { 
    navigator.globalization.getLocaleName(function (locale) {
        jQuery.i18n.properties({
            name:'message', 
            path:'lang/', 
            mode:'map',
            language:locale.value,
            callback: onLanguageReady(locale)
        });
    });
}

function onLanguageReady(locale) {
     alert(locale.value);
     alert(jQuery.i18n.prop('msg_hello'));
     alert(jQuery.i18n.prop('msg_complex', 'John'));    
}

我想在不同的函数中进行回调,因此我的代码看起来更干净,但无法使其工作。第一个警报将起作用(它将显示nl_NL),但第二个和第三个警报将输出[msg_hello]和[msg_complex]。

非常感谢!

3 个答案:

答案 0 :(得分:2)

这是因为您要将undefined分配给callback属性。

您正在调用onLanguageReady并将该值分配给回调方法。

解决方案是使用另一个函数作为回调函数,它将调用@romainberger给出的onLanguageReady函数

答案 1 :(得分:1)

试试这个:

// beginning of code omitted
callback: function(locale) {
    onLanguageReady(locale)
}

答案 2 :(得分:0)

function onCordovaReady() { 
    navigator.globalization.getLocaleName(function (locale) {
        jQuery.i18n.properties({
            name:'message', 
            path:'lang/', 
            mode:'map',
            language:locale.value,
            callback: onLanguageReady
        });
    });
}

function onLanguageReady(locale) {
     alert(locale.value);
     alert(jQuery.i18n.prop('msg_hello'));
     alert(jQuery.i18n.prop('msg_complex', 'John'));    
}
如果函数使用locale回调,

将起作用。

回调期望一个函数指针,当你说onLanguageReady(locale)你实际执行函数并因此将函数的结果指定为回调函数时,它可以调用它,在这种情况下返回因此undefined