数週間前、私は機能を返す関数が好きだと言って、Weiboの投稿を投稿しました。いくつかの返信がすぐに現れました、基本的にそれらすべて...何? !プログラマーの場合、関数を返す関数を理解することは非常に重要なスキルです。それを使用して、多くのコードを保存し、JavaScriptをより効率的にし、JavaScriptの力をさらに理解させることができます。以下は、私が書いたいくつかの簡単な例です。
2つの子オブジェクトを含むオブジェクトがあり、それらにはすべてGETメソッドがあるとします。これらの2つの方法は非常に似ており、わずかに異なります。
var accessors = {sortable:{get:function(){return of this.getattribute( 'sortable')!= 'undefined'; }}、droppable:{get:function(){return typeof this.getAttribute( 'droppable')!= 'undefined'; }}};繰り返しコードは良い現象ではないため、外部関数を作成してプロパティ名を受け入れる必要があります。
function getAttribute(attr){return typeof this.getattribute(attr)!= 'undefined';} var accessors = {sortable:{get:function(){return getattribute( 'sortable'); }}、droppable:{get:function(){return getattribute( 'droppable'); }}};これははるかに優れていますが、まだ冗長な部分があるため、まだ完璧ではありません。より良い方法は、最終的に必要な関数を直接返すことです。これにより、冗長な関数の実行が排除されます。
function generategetMethod(attr){return function(){return typeof this.getattribute(attr)!= 'undefined'; };} var accessors = {sortable:{get:generategetmethod( 'sortable')}、droppable:{get:generategetmethod( 'droppable')}};/ *元の方法と完全に等しい: */varアクセサ= {sortable:{get:undef( 'undef(' undef ') }}、droppable:{get:function(){return typeof this.getAttribute( 'droppable')!= 'undefined'; }}};*/上に表示されるのは、関数を返す関数です。各子オブジェクトには独自のGETメソッドがありますが、不要な関数ネストされた実行プロセスが削除されます。
これは、同様のコードの重複を排除するのに役立つ非常に便利な手法です。適切に使用すると、コードがより読みやすく、メンテナンスが容易になります!
わかりますか?