2012-09-25 55 views
-2

以這種方式分配變量的目的是在嵌套作用域存在時爲父作用域內的活動對象提供訪問。我認爲這是一種很差的形式;爲什麼不爲父目標對象提供更有意義的變量名?var that = this,self = this等

例如,如果我們選擇頁面中的所有div,並遍歷它們。在每個div中,我們選擇目標div中的所有錨鏈接,在嵌套循環中迭代這些錨鏈接。在這個例子中,外部作用域的「this」是當前目標div,內部作用域的「this」將是當前目標錨鏈接。

要在外部範圍創建一個鉤到活動的目標DIV,我通常會看到:

var that = this; 

即使在Crockford的好零配件的書,他使用這個任務。

在質疑這種技術,爲什麼不更有意義的事情做出醜的風險,像

var outerDiv = this; 

你覺得呢?

+0

你可以這樣做。 – sachleen

+2

這只是一個命名約定。每當我看到一些名爲'self'和'that'的東西時,我傾向於知道它是什麼意思,而如果我看到'outerDiv',我就不得不搜索它是否是一個局部變量。 –

+1

@sachleen:你的意思是,「你可以做_this _...」:) – user1354017

回答

0

我主要是做這樣的

function() { 
    // use 'this' as it is 
}.bind(this) 

或者我打電話從外面

closure.call(this); // the scope inside the closure is now 'this' too 

與範圍封我不需要名字很有趣呢。

3

這非常好,但是您談論this作爲變量迭代的方式使得它聽起來像您正在使用jQuery。這並不總是一個元素,有時that是很有道理的:

function Constructor() { 
    var that = this; 

    this.eventListenerThatWillBeBound = function() { 
     // Do something with that 
    }; 
} 

所以......隨便用在情況最清楚。

1

我認爲你應該以對你有意義的方式命名變量。

人們使用約定,因爲那樣他們就可以立刻將其識別爲代表一種常見的場景,其他人閱讀代碼也是如此。

如果您不喜歡傳統的做事方式,請按自己的方式進行,但請確保您的變量對其他人閱讀代碼有意義。


FWIW,self是在瀏覽器全球範圍內的引用,所以是有意義的一些人的影子與最近的外部背景下self變量,通過做self = this

相關問題