0

尝试mColumns在对象内使用参数时,以下代码存在问题。第一个控制台日志正确输出,但传递给的对象内部的日志Backbone.View.extend没有,它输出未定义。

define(["collections/mColumns"],function(mColumns){
        console.log(mColumns);
        return Backbone.View.extend({
                el: "#content",
                events:{
                    'click #addText': "addText"
                },
                initialize: function(mColumns){
                    console.log(mColumns);
                }
            }); 
});

但是,如果我事先创建一个对象,然后将该对象作为参数传递它就可以正常工作。两个控制台日志都正确输出。

define(["collections/mColumns"],function(mColumns){
    console.log(mColumns);
    var obj = {
        el: "#content",
        events:{
            'click #addText': "addText"
        },
        initialize: function(){
            console.log(mColumns);
        }
    }
    return Backbone.View.extend(obj);
});

为什么是这样?

4

1 回答 1

1

工作(第二个)片段和第一个片段之间的区别在于第一个片段隐藏了mColumns变量。通过定义同名的形式函数参数,原始变量对于函数内部的代码变得不可见:

define(["collections/mColumns"],function(mColumns){  // <-- mColumns (#1)
    ...
    return Backbone.View.extend({
        ...
        initialize: function(mColumns){              // <-- mColumns (#2)
            console.log(mColumns);                   // <-- Refers to #2
        }
    })
});
于 2012-10-01T09:05:08.330 回答