2

如果您需要在嵌套函数中保留范围,通常会创建一个变量,即 this 像这样:var that = this;并引用that在嵌套函数中引用。3 级及以上学位的约定名称是什么?

我也遇到过一些使用代理的情况,但从来没有在 JQuery 中传递嵌套代理。proxy嵌套s有什么特别的吗

骨干中出现了常规范围问题,有可能(我们仍在努力解决它)必须再往下走:

keyPressed: function(keyEvent) {
if(case1 && case2 && case3) {
  if(anotherCase) {
    .....
  }
  else if(yetAnotherCase) {
    ....
    var that = this;
    window.waitIntervalID = window.setInterval(function() {
      if(that.waitCount == 2) {
        that.isWaiting = false;
        that.waitCount = 0;

        that.mainCounter = 0;
        that.isRecording = true;
        for(var i = 0; i < that.signature; i++) {
          that.beatArray[i] = 0;
        }
        window.tapIntervalID = window.setInterval(function() {
          that.count = that.mainCounter + 1;              
          that.mainCounterTime = new Date().getTime();
          that.mainCounter = (that.mainCounter + 1) % that.signature;
        }, that.average);
        that.isTapping = false;
        that.countIn = 1;
        var bpm = 1000 / that.average * 60;
        that.set('tempo', bpm);
        window.clearInterval(waitIntervalID);
      }
      that.waitCount++;
    }, this.average);
    this.countIn++;
  }
}
},

代理范围:

    // add click handler to this beat
    $('#beat'+this.model.cid).click($.proxy(this.toggle, this));
    return this;
4

1 回答 1

6

我建议为您正在处理的项目使用特定的变量名称,而不是像thatorself或这样的通用名称me。然后应该很明显使用什么名称。

例如,如果this是一个 DOM 元素,您可以使用:

var element = this;

如果this是一个Cat对象(因为我在此页面的广告中看到一只猫而想到),您可以使用:

var cat = this;

等等

当然,如果您要处理更具体的元素、猫或其他什么,您可以使用比这更具体的名称。如果我有一个处理单个通用 DOM 元素的函数,我可能会调用 variable element,但如果它处理 a<ul>和 a<li>我可能会使用ulandli作为相应的变量名。或者代码中任何有意义的名称。

此外,尽可能避免this完全使用。典型 jQuery 代码中的大部分使用this来自于和之类的函数$.each()$().each()例如

$('.foobar').each( function() {
    var element = this;
    $(element).on( 'click', function() {
        alert( 'Clicked = ' + element.id );
    });
});

改用命名参数会更好.each()

$('.foobar').each( function( i, element ) {
    $(element).on( 'click', function() {
        alert( 'Clicked = ' + element.id );
    });
});

关于nestedCat在嵌套函数中使用的问题,我绝对不会使用引用代码结构的变量名。相反,名称应该指的是您正在谈论的事情。

什么是嵌套猫?我想这一定是一只小猫,所以现在我们可以谈谈:

function Cat( args ) {
    this.sex = args.sex;
    this.name = args.name;
    this.kittens = args.kittens;
}

var mommyCat = new Cat({
    sex:'F',
    name: 'Mommy Cat',
    kittens: [
        new Cat({ sex: 'M', name: 'Tom Kitty' }),
        new Cat({ sex: 'F', name: 'Cute Kitty' })
    ]
});
console.log( mommyCat );
mommyCat.kittens.forEach( function( kitten ) {
    console.log( kitten );
});

那日志:

Cat {sex: "F", name: "Mommy Cat", kittens: Array[2]}
Cat {sex: "M", name: "Tom Kitty", kittens: undefined}
Cat {sex: "F", name: "Cute Kitty", kittens: undefined}
于 2013-04-28T16:36:57.703 回答