下記のソースは、ブレイクスルーjavascript99頁のソースです。
ドキュメント要素をクリックするたびにコンソールが表示されるが、二回目以降は、1秒処理を遅らせるものです。
javascript
1//jquery 3.3.1 2var prevState = new $.Deferred().resolve().promise(); 3 4function asyncFuncDef() { 5 var deferred = new $.Deferred(); 6 setTimeout(function() { 7 deferred.resolve("done"); 8 }, 1000); 9 return deferred.promise(); 10} 11 12$(document).on("click",function() { 13 prevState = prevState.then(function() { 14 console.log("done"); 15 return asyncFuncDef(); 16 }); 17});
ソースのどのあたりで、一回目と二回目を判別しているのでしょうか。
一見するとクリックされるとクリックで発火するイベントリスナーが実行され、asyncFuncDef()
が返値で実行され、またクリックされるとクリックで発火するイベントリスナーが実行され、asyncFuncDef()
が返値で実行され…
と一回のクリックでdoneが二回表示されるようにしか見えません。しかし、実際に実行するとそうではありませんでした。
どこで1回目と2回目を判定しているのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/30 09:49
2018/08/30 11:53
2018/09/03 09:54
2018/09/14 16:14