質問するログイン新規登録

回答編集履歴

2

判断は無理でした、路線変更

2019/02/20 02:13

投稿

miyabi-sun
miyabi-sun

スコア21510

answer CHANGED
@@ -1,10 +1,14 @@
1
- ドキュメントを参照して、「コールバックが定義されているか否か」でります。
1
+ ドキュメントを参照して、「コールバックが定義されているか否か」である程度は判別できます。
2
2
 
3
- - 定義されている: 非同期処理
3
+ - 定義されている: 非同期処理の可能性がある
4
- - 定義されていない: 同期処理
4
+ - 定義されていない: 確実に同期処理
5
5
 
6
6
  このように覚えておけば大丈夫です。
7
+ 定義されている場合、コールバックの第一引数がエラー(err)であるかで判別できます。
7
8
 
9
+ - 第一引数がerrである: 確実に非同期処理
10
+ - 第一引数がerrではない: ドキュメントを読んで判断しよう
11
+
8
12
  JavaScriptの公式リファレンスはECMAScriptですが超絶読みづらいので、
9
13
  Firefox作ってる団体が管理している[MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript)で調べると良いでしょう。
10
14
 
@@ -38,12 +42,8 @@
38
42
  はーつっかえ、やめたら?この書き方!
39
43
 
40
44
  なので理由が無い限り使わない。
41
- これが「コールバックが定義されているか否かで判別出来る」とした最の理由です。
45
+ これが大原則です。
42
46
 
43
- ライブラリの製作者がよほどの間抜けで違いが分からないならともかく、
44
- 有名所のライブラリでそんなコードをドヤ顔で公開したら速攻で叩かれますね。
45
- そういう訳で有名所のライブラリならばドキュメントを読むだけで見分けられます。
46
-
47
47
  ---
48
48
 
49
49
  JavaScriptはシングルスレッドなので並列処理が出来ません。
@@ -74,8 +74,23 @@
74
74
 
75
75
  JavaScriptのビルトイン機能ですね。
76
76
  コールバックをくださいとは言っていませんね?
77
- なのでこれは「同期処理」です。
77
+ なのでこれは検討するまでもなく「同期処理」です。
78
78
 
79
79
  DOM APIを使ったDOM操作は基本的にJavaScriptの管轄として扱われるので、
80
80
  確かにDOMの構成をドラスティックに変更してしまうのは超重いのですが、
81
- これはしょうがない、払うべきコストなので非同期処理ではなく同期処理なのです。
81
+ これはしょうがない、払うべきコストなので非同期処理ではなく同期処理なのです。
82
+
83
+ > コールバックを定義されているのに同期処理ってもしかしたらあるんじゃないの?
84
+
85
+ あります。
86
+ 公開関数と呼ばれるものがその代表例です。
87
+
88
+ [Array.prototype.map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)がその象徴です。
89
+
90
+ ```JavaScript
91
+ [1, 2, 3].map(function (num) { return num + 2 });
92
+ // [3, 4, 5]
93
+ ```
94
+
95
+ 配列のビルトインメソッドに集中しているイメージがありますが、
96
+ map, filter, sort, reduce…を始めとするロジックを注入するものは例外としてコールバックを定義されているのに非同期ではありません。

1

冒頭を修正

2019/02/20 02:13

投稿

miyabi-sun
miyabi-sun

スコア21510

answer CHANGED
@@ -1,8 +1,17 @@
1
- ビルトイン関数やメソッドの場合、コールバックを求めるものが非同期処理
2
- ライブラリも同様でドキュメントを参照してコールバックを求めるもの非同期処理
1
+ ドキュメントを参照して、「コールバックが定義されているか否か」で決まります。
3
2
 
3
+ - 定義されている: 非同期処理
4
+ - 定義されていない: 同期処理
5
+
4
6
  このように覚えておけば大丈夫です。
5
7
 
8
+ JavaScriptの公式リファレンスはECMAScriptですが超絶読みづらいので、
9
+ Firefox作ってる団体が管理している[MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript)で調べると良いでしょう。
10
+
11
+ ライブラリは各種ライブラリが提供している公式のドキュメントやリファレンスを閲覧してください。
12
+ なければソースコードを直接読んでください。
13
+ Qiitaや各種ブログは鵜呑みにしないようにしてください、侍エンジニア○塾のブログなんてもっての他です。
14
+
6
15
  ---
7
16
 
8
17
  実はコールバックを定義する同期処理というのは書こうと思えば書けます。