2017-11-09 15 views
0

私はJqueryを初めて読んで、「JQueryInAction」という本を読んでいます。私はJavaScriptを知っていると私はclosuresを理解する:ここでJqueryInActionブックの例では代わりにローカル変数を使用

$(function(){ 
    $('*').each(function(){ 
     var current = this; 
     this. onclick = function(event) { 
      if (!event) event = window.event; 
      var target = (event.target) ? event.target : event.srcElement; 
      say('For ' + current.tagName + '#'+ current.id + 
       ' target is ' + target.id); 
     } 
    }); 
}); 

私は本当にローカル変数current代わりのラインでthisなし3.

注の使用を理解していない: 私はこの本からこの例に出くわしましたそしてどのようにthisclosureの内部で利用できないのですか?ここではそうではありませんが、thisはイベントハンドラの中で利用できます。 currentの意味は何ですか?

答えて

0

ES6矢印関数の導入に先立ち、すべての関数は独自の値を持ち、その値は関数の呼び出し方法によって決まります。

イベントハンドラには独自のthisがありますが、囲む字句コンテキストのthisにもアクセスする必要がありますが、どちらにもthisを使用することはできません。この問題を解決するために、外部関数からのthisの値が新しい変数に保存されるため、問題なくハンドラで使用できるようになります。

ES6 Arrow functionsは、独自のものを持っていません。thisまたはargumentsです。囲み実行コンテキストの値thisが代わりに使用されます。

あなたのコードは次のように書き換えることができます。イベントハンドラは、外字句envirnmentのこの上で呼び出されたように、外側envirnmentで同じ

$('*').each(function() { 
    this.onclick = (event) => { 
    if (!event) event = window.event; 
    var target = (event.target) ? event.target : event.srcElement; 
    say('For ' + this.tagName + '#'+ this.id + ' target is ' + target.id); 
    } 
}); 
+0

は、この内部ではないですか? – vvtx

関連する問題