2013-04-28 51 views
2

如果需要将作用域保留在嵌套函数中,通常会在嵌套函数中创建一个如下所示的变量:var that = this;和参考that。第三学位及以后的会议名称是什么?用于第三个(或更多)嵌套作用域的JS作用域约定

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

正常范围问题在骨干上来了,有一个潜在的(我们仍然可以通过它的工作)不得不去另一个层面下来:

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; 
+0

贵国是否能说明为什么/如何你想改变的变量名的例子在不同的范围? – 2013-04-28 17:19:43

+0

@MattKantor发布 – 2013-04-29 02:08:39

回答

6

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

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

var element = this; 

如果thisCat对象(涉及到介意,因为我看到这个页面上的广告猫),你可以使用:

var cat = this; 

当然,如果你处理的是更具体的元素,或猫,或什么的,你凑ld使用比这个更具体的名字。如果我有一个处理单个通用DOM元素的函数,我可能会调用变量element,但是如果它处理一个<ul><li>我可能会使用ulli作为各个变量名称。或者代码中的任何名称都有意义。

此外,请尽量避免使用thisthis在典型jQuery代码中的大部分使用来自诸如$.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} 
+0

,你只是在下面的嵌套区域称它为'nestedCat'? – 2013-04-28 17:07:32

+0

花了我一下,但我明白了,thx ... – 2013-04-29 02:10:51