2017-04-03 7 views
0

このコードは動作します。しかし、私はこれが閉鎖を実装するための候補者であるかどうか考えてきました。私を聞いてください。これはjavascript Closureの候補ですか?

私はこれをしたい:

$(".trigger").click(function() {  
    $(this).parents(".heading").next(".list").slideToggle("slow", function() { 
     $(this).toggleClass("close"); 
     $(this).parents(".heading").toggleClass("close"); 
    }); 

});  

実行が側slideToggle機能thisにある問題はtriggerを指していないようです。私はこれを行うことで仕事を見つけた:

$(".trigger").click(function() {  
    var self = $(this); 
    $(this).parents(".heading").next(".list").slideToggle("slow", function() { 
     $(self).toggleClass("close"); 
     $(self).parents(".heading").toggleClass("close"); 
    }); 
}); 

それは動作します。しかし、私は閉鎖を実行するための良い候補者かどうか疑問に思っていますか?そして、コード品質を向上させます。ありがとう。

+0

クロージャーとは何ですか? –

+0

なぜ 'this'は別の関数内のクリックされた要素を指していますか? 'slideToggle'のドキュメントを一読しましたか?コールバックの中で、 'this'は滑る要素です。 – adeneo

+0

なぜ '' self''が '' $(this)) ''ならば、 '' $() ''に '' self''を再度ラップしますか? –

答えて

3

クロージャは、その目的が異なるため、ここでは特に役立ちません。バインディング矢印関数は任意のコンテキストの無知であり、ちょうどthisを意味字句文脈に固執:、thisが変更されることはありません今

$(".trigger").click(function() {  
    $(this).parents(".heading").next(".list").slideToggle("slow",() => { 
     $(this).toggleClass("close"); 
     $(this).parents(".heading").toggleClass("close"); 
    }); 
}); 

:しかし、あなたは字句コンテキストを使用する矢印関数の動作を使用することができますclickコールバック関数と同じthisです。

関連する問題