javascript参数问题

时间:2012-10-01 08:47:33

标签: javascript backbone.js requirejs

尝试在对象中使用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);
});

为什么会这样?

1 个答案:

答案 0 :(得分:1)

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

define(["collections/mColumns"],function(mColumns){  // <-- mColumns (#1)
    ...
    return Backbone.View.extend({
        ...
        initialize: function(mColumns){              // <-- mColumns (#2)
            console.log(mColumns);                   // <-- Refers to #2
        }
    })
});