2012-01-28 2 views
0

w.r.t a divと呼ばれるthisポインタのスコープまたは可視性は、そのネストされた機能ではなく、意図された機能に制限されます。javascriptの「this」ポインタの範囲が制限されているのはなぜですか?

しかし、その関数のすべてのローカル変数は、ネストされた関数に表示されている - これはなぜdiv要素に<function name>(this)で関数を呼び出す経由thisポインタを取得... ??起こるん - これもthisを意味doesntのまた、要するに<function name>

内のローカル変数である指摘し、ここtst1 functionthis変数で私を混同コード..

<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> 

nullが、地元のVARされますその関数のiableは、tst2のようにネストされた関数に表示される必要があります。

機能が後で呼び出されているので、私は、閉鎖に読んでいた

からsetTimeout経由tst1tst2が返された後も - 両方の機能の閉鎖ではありませんか?もしそうなら、親関数内の変数はネストされた関数内で可視であるべきですか?

答えて

2

this javacript内の変数は、特定の関数呼び出し。基本的には、すべての関数呼び出しに対して1つのthisがありますが、必ずしもそうであるとは限りませんが、外部関数で使用されていたのと同じである必要はありません。this

thisを内部関数内で使用するために保存する場合は、ローカルに保存します。親から `this`がネストされた関数ときの状態ではアクセスできませんでした、なぜ私のポイントだった..私はあなたがそれをコピーするときにuがそれにアクセスすることができます知っている私はtst2``でやっているものだ

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

、親関数の中で__references__のように(私は 'this'を含むと思います)、入れ子になってアクセス可能でなければなりません。 –

+1

@VivekChandra it'sすべての関数が 'this 'を持っているので、あなたは常に現在の関数の' this'を要求しています。どんな地方でも同じです。外側と内側の関数が同じ名前の地方を持つ場合、外側の関数には決してアクセスできず、内側の関数だけにアクセスすることはできません。 – JaredPar

+0

urの前のコメントの後半は私の疑問を解決しました..ありがとう.. –

関連する問題