質問: new $.Deferred().resolve()`のようにしても動きますが、メソッドチェーンの最後にpromise()を置くことで何の効能が得られるのでしょうか。 また、そもそもなぜ、ソースの一行目で処理を完了resolveしたことを通達させたのでしょうか。
回答: `$.Deferred().resolve()`のみだとDeferredオブジェクトが返ってきますが、`new $.Deferred().resolve().promise()`だとpromiseオブジェクトが返ってきます。 このソースはpromiseオブジェクトを持ちまわって遅延実行を実装するサンプルと思いますので、stateとして保存するオブジェクトの種類をそろえているのでしょう。 Deferredオブジェクトもpromiseオブジェクトと同じ振る舞いをするのでそのまま使えますが、1回目のクリック後はprevStateはpromiseオブジェクトになってしまうので。