2012-01-28 27 views
0

this指針的範圍或可見性被稱爲w.r.t一個div僅限於它所針對的函數,而不是它的NESTED函數。爲什麼JavaScript中的「this」指針範圍受到限制?

不過,所有函數的局部變量的嵌套函數是可見的 - 爲什麼會發生這種情況?..通過調用帶有<function name>(this)上一個div功能得到this指針 - 犯規這意味着即使是this也指出在<function name>

總之一個局部變量,這裏是它讓我感到困惑的代碼..

<html> 
<script type="text/javascript" > 
    function tst1(){ 
    setTimeout(
    function(){ 
    alert(this.id) 
    }, 2000) 
    } 
    function tst2(){ 
    var elem = this 
    setTimeout(
    function(){ 
    alert(elem.id) 
    }, 2000) 
    } 
</script> 
<style type="text/css"> 
    .test{ 
    margin: 40px 100px; 
    background-color: green; 
    width: 200px; 
    line-height: 40px; 
    text-align: center; 
    height: 40px; 
    } 
</style> 
<div id="fooBar" class="test" onclick="tst1.call(this)"> Emily Rossum</div> 
<div id="chickenRun" class="test" onclick="tst2.call(this)"> Emily Rossum</div> 
</html> 

tst1 functionthis變量null但局部變量如tst2所示,嵌套函數中應該可以看到該函數的可見性。

我正在讀的關閉,因爲該函數被後來被稱爲 - 通過setTimeout甚至tst1tst2後返回 - 兩者不關閉的功能? (如果是這樣,這是父函數中的變量應該可以在嵌套函數中看到,不是嗎?)

回答

2

在javascript中的this變量不同於其他變量,因爲它總是特定於特定的函數調用。對於每個函數調用基本上都有一個this,雖然它可能與用於外部函數的this相同,但並不一定是這樣。

如果您希望保留在內部函數中使用外this然後將其保存到本地。

var outer = function() { 
    var self = this; // Save current 'this' in a local 
    var inner = function() { 
    self.name; // refers to the original outer 'this.name' 
    ... 
    }; 
    ... 
}; 
+0

這就是我在'tst2'正在做..我知道,當你把它複製ü可以訪問它,我的觀點是,爲什麼是'this'從父沒有嵌套函數訪問時態的父母是應該保存嵌套訪問返回功能,即使以後。作爲從父功能(我想包括'this')的__references__應該在嵌套.. – 2012-01-28 22:10:39

+1

@VivekChandra它的訪問因爲每個函數都有'this'因此你總是問'this'當前功能的,而不是保存一個。任何地方都一樣。如果外部函數和內部函數具有相同名稱的本地文件,則永遠不能訪問外部文件,而只能訪問內部文件。 – JaredPar 2012-01-28 22:12:29

+0

你以前的評論後半部分清除了我的疑惑..謝謝.. – 2012-01-28 22:18:57