误解了javascript执行流程

时间:2014-01-24 21:02:18

标签: javascript backbone.js backbone-collections

我从Backbone开始,我正在为手机销售编写应用程序。但我怀疑是专门针对javascript执行流程。

情况是我有一个自定义的方法来拒绝我的购物车集合上的重复,这些方法是这样的:

var Cart = Backbone.Collection.extend({
            contains : function(aProduct){
                _.each(this.models, function( element, index, list ){
                    if( element.get('product').get('id') == aProduct.get('id') ){ 
                        return true; 
                    }
                });
                return false;
            }
        });

该方法检测重复项并尝试返回true,但该行不是最后一行,因为执行的最后一个语句是“return false”。在这一点上,我意识到我在这个javascript执行流程中有一个误解。

也许你们其中一个人可以用你的知识来启发我

感谢

1 个答案:

答案 0 :(得分:0)

您从传递给_.each的函数返回true。这与您的包含功能不同。这是一种让它运作的方法:

var Cart = Backbone.Collection.extend({
            contains : function(aProduct){
                var doesContain = false;
                _.each(this.models, function( element, index, list ){
                    if( element.get('product').get('id') == aProduct.get('id') ){ 
                        doesContain = true; 
                    }
                });
                return doesContain;
            }
        });

然而,更好的方法(假设是lodash或下划线),将是_.any

var Cart = Backbone.Collection.extend({
            contains : function(aProduct){
                return _.any(this.models, function( element ){
                    if( element.get('product').get('id') == aProduct.get('id') ){ 
                        return true; 
                    }
                });
            }
        });