第三(和更多)嵌套范围的JS范围约定

时间:2013-04-28 16:18:14

标签: javascript

如果你需要在一个嵌套函数中保留作用域,那么通常会在嵌套函数中创建一个与此类似的变量: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;

1 个答案:

答案 0 :(得分:6)

我建议为您要处理的项目使用特定的变量名称,而不是thatselfme等通用名称。那么应该明白要使用什么名称。

例如,如果this是DOM元素,则可以使用:

var element = this;

如果thisCat对象(我想到这是因为我在此页面上的广告中看到了一只猫),您可以使用:

var cat = this;

当然,如果你正在处理更具体的元素,猫或其他什么,你可以使用更具体的名称。如果我有一个处理单个通用DOM元素的函数,我可以调用变量element,但是,如果它处理<ul><li>我可能会使用{{ 1}}和ul表示相应的变量名称。或者代码中的任何名称都有意义。

另外,尽可能避免完全使用lithis在典型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 );
});