2013-04-28 39 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