JS:为什么var在对象的方法中声明并且作为参数传递给同一对象的另一个方法时没有声明?

时间:2016-02-26 14:38:24

标签: javascript declaration var

我不知道为什么会出现错误" ReferenceError i未声明",当变量在对象的方法内声明并作为参数传递给其他方法时相同的对象。

这是我的JS:

var reservasAPP = {   
    generarGrilla: function(){
        //la llamo desde el html con jQuery(document).ready();
        for(var i=1; i<13; i++){
            var impresionGrilla = $('#grilla').append("<button class=\"btn btn-primary btn-xs\" onclick=\"return reservasAPP.guardarReserva(i);\">Reservar</button>");
        };
    },
    nombre: function (i) {
        return $('#horario'+i).val();
    },  
    guardarReserva:function(i){
        var reservaConfirmada = $('#horario'+i).html('--> '+this.nombre());
        console.log("whatever "+i);
        console.log(i);
        return false;
    },    
}

window.reservas = reservasAPP;

如果我去控制台并尝试获取var的值,我输入&#34; var i&#34;,我得到&#34; undefined&#34;。为什么未定义?

3 个答案:

答案 0 :(得分:1)

generarGrilla功能替换为:

generarGrilla: function() {
    for (var i = 1; i < 13; i++){
        $('#grilla').append('<button class="btn btn-primary btn-xs">')
                    .on('click', this.guardarReserva.bind(this, i));
    }
},

上面的代码用jQuery注册的处理程序替换了内联DOM0事件处理程序。

该处理程序由.bind调用生成,这不仅可以确保使用正确的guardarReserva调用this,还可以传递i的当前值作为该函数的第一个参数传递。

[在guardaReserva()内,您还需要记住在致电i时传递this.nombre(),即this.nombre(i)

答案 1 :(得分:1)

试试这个......

var reservasAPP = {   
    generarGrilla: function(){
        //la llamo desde el html con jQuery(document).ready();
        for(var i=1; i<13; i++){
            var impresionGrilla = $('#grilla').append("<button class=\"btn btn-primary btn-xs\" onclick=\"return reservasAPP.guardarReserva(" + i + ");\">Reservar</button>");
        };
    },
    nombre: function (i) {
        return $('#horario'+i).val();
    },  
    guardarReserva:function(i){
        var reservaConfirmada = $('#horario'+i).html('--> '+this.nombre(i));
        console.log("whatever "+i);
        console.log(i);
        return false;
    },    
}

<强>解释 "<button class=\"btn btn-primary btn-xs\" onclick=\"return reservasAPP.guardarReserva(i);\">Reservar</button>"被注入到DOM中但变量&#34; i&#34;那里没有意义。

此外,&#34; nombre&#34;函数需要一个参数,该参数显然应该是传递给&#34; guardarReserva&#34;功能。因此,以下行已更改:

var reservaConfirmada = $('#horario'+i).html('--> '+this.nombre());

var reservaConfirmada = $('#horario'+i).html('--> '+this.nombre(i));

答案 2 :(得分:1)

如果那个i变量你试图在这里使用:

  

nombre:function(i)

     

guardarReserva:功能(I)

我在这里宣称:

generarGrilla: function(){
//la llamo desde el html con jQuery(document).ready();
for(var i=1; i<13; i++){

我只在generarGrilla函数的范围内定义了为什么你得到&#34; ReferenceError i未被声明&#34;错误。