如果你需要在一个嵌套函数中保留作用域,那么通常会在嵌套函数中创建一个与此类似的变量: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;
答案 0 :(得分:6)
我建议为您要处理的项目使用特定的变量名称,而不是that
或self
或me
等通用名称。那么应该明白要使用什么名称。
例如,如果this
是DOM元素,则可以使用:
var element = this;
如果this
是Cat
对象(我想到这是因为我在此页面上的广告中看到了一只猫),您可以使用:
var cat = this;
等
当然,如果你正在处理更具体的元素,猫或其他什么,你可以使用更具体的名称。如果我有一个处理单个通用DOM元素的函数,我可以调用变量element
,但是,如果它处理<ul>
和<li>
我可能会使用{{ 1}}和ul
表示相应的变量名称。或者代码中的任何名称都有意义。
另外,尽可能避免完全使用li
。 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 );
});