我的问题:
我正在重构我的一些代码,并为一些长匿名函数命名。不幸的是,它以我不理解的方式打破了应用程序。
代码
匿名版工作正常,
警报(distributeurs.length);
与0不同。
var group = this.settings.group, //group used to store all the markers added to the map
leads = this.model.get("leads"), // collection of leads
distributeurs = new Distributeurs(), // collection of distributeurs
map = this.settings.map,
addLeadsCollection = this.addLeadsCollectionFnContructor();
//ajax calls to populate collection
$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
function () //the function
{
alert( distributeurs.length ); //the alert
distributeurs.map( function ( distributeur )
{
addLeadsCollection( leads.filter( function ( lead )
{
return distributeur.get( "id" ) === lead.get( "distribution" );
}
) );
}
);
}
);
命名版本:它没有任何作为
警报(distributeurs.length);
始终为0。
var group = this.settings.group, //group used to store all the markers added to the map
leads = this.model.get("leads"), // collection of leads
distributeurs = new Distributeurs(), // collection of distributeurs
map = this.settings.map,
addLeadsCollection = this.addLeadsCollectionFnContructor();
//the function
var addCollections = function() {
alert(distributeurs.length); //the alert
distributeurs.map(function(distributeur) {
addLeadsCollection(leads.filter(function(lead) {
return distributeur.get("id") === lead.get("distribution");
}
));
}
);
};
//ajax calls to populate collection
$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
addCollections()
);
我的问题
为什么这两个函数的行为不同,我应该如何声明我的命名函数,使其像匿名函数一样。
答案 0 :(得分:3)
从addCollections()
中删除括号。你正在立即调用这个函数;你要做的是改为传递函数。
实际上,在这两种情况下,您的函数都是匿名的。您在第二种情况下所做的就是将函数的引用分配给变量。要使函数不是匿名函数,可以使用函数声明:
function addCollections() {
// Stuff...
}
...或使用named function expression:
var addCollections = function someName() {
// someName is now a reference to the function, but only
// within the function
};
答案 1 :(得分:1)
这不是命名函数,而是将函数赋给名为addCollections
的变量。你的问题是你正在调用函数而不是传入引用:
$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
addCollections()
);
删除括号:
$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
addCollections
);