1
(function() {

    var content = [
        {
            title: 'My awesome blog post',   
            thumbnail: 'images/bane.jpg',
        },
        {
            title: 'My second awesome blog post',
            thumbnail: 'images/joker.jpg',
        },
    ],
        template = $.trim( $('#blogTemplate').html() ),
        frag = '';

    $.each( content, function( index, obj ) {  
        frag +=
            template.replace( /{{title}}/ig, obj.title )
                    .replace( /{{thumbnail}}/ig, obj.thumbnail );       
    });

    $('body').append(frag);

})();

你好,

我只是想知道为什么包含在自调用匿名函数中的代码块不能具有以下以 var 关键字为前缀的变量声明,如下所示:

    var template = $.trim( $('#blogTemplate').html() ),
    var frag = '';

将 var 关键字添加到此函数的局部变量中 -template似乎frag破坏了我的代码,我真的不明白为什么,但是如果我声明templatefrag在函数外部的全局范围内,如下所示,那么我的代码可以工作。

var template;
var frag;

如果这与范围有关,并且任何人都有时间解释,将不胜感激。理想情况下,我想添加前缀templatefragvar 关键字以增加可读性。

4

3 回答 3

3

我怀疑是变量声明之间的逗号破坏了您的代码,而不是var关键字本身的使用。试试这个:

var template = $.trim( $('#blogTemplate').html() ),
frag = '';

var关键字已经应用于您提供的第一个片段中的模板和片段,因为它们是局部变量声明的逗号分隔列表中的第二项和第三项。

function(){
    var x = 1, 
        y = 2, 
        z = 3;
    window.x; //undefined
    x; //1
    window.y;//undefined
    y; //2
}

最简洁的方法是完全避开语法糖,并将每个变量声明分隔成单独的语句:

var content = [
    {
        title: 'My awesome blog post',   
        thumbnail: 'images/bane.jpg',
    },
    {
        title: 'My second awesome blog post',
        thumbnail: 'images/joker.jpg',
    }
];
var template = $.trim($('#blogTemplate').html());
var frag = '';
于 2012-11-22T14:24:56.690 回答
0

您不需要在它们前面加上var

var a, b, c;

已经相当于:

var a;
var b;
var c;
于 2012-11-22T14:27:16.593 回答
0

它们已经是本地的并且var在它们前面 - 请注意使所有变量成为声明和定义的单个列表的逗号,您似乎没有注意到这一点,因为它们被分成几行:

var content = [ /* multi-line array */ ], template = $.trim( $('#blogTemplate').html() ), frag = '';

自然,var在列表中添加更多是不好的语法。

于 2012-11-22T14:29:13.177 回答