回答編集履歴
2
最後の部分を調整
answer
CHANGED
@@ -27,8 +27,12 @@
|
|
27
27
|
|
28
28
|
1個目: 例外スローはyambejpさんの案です。
|
29
29
|
2個目: 関数の外から変数を弄る
|
30
|
-
|
30
|
+
この書き方は外の変数に依存するので使い勝手が非常に悪いです。
|
31
31
|
|
32
|
+
それとコードを見れば分かりますが、
|
33
|
+
いつの間にか`flags.test`の値がfalseになったのかコードからは中々読み取れません。
|
34
|
+
従ってこういう書き方を多くの場面でやっているプロジェクトは技術的負債で進捗が大幅に遅延することになります。
|
35
|
+
|
32
36
|
```JavaScript
|
33
37
|
var main = function () {
|
34
38
|
var flags = {
|
@@ -47,8 +51,11 @@
|
|
47
51
|
```
|
48
52
|
|
49
53
|
3個目: オブジェクトの参照を渡して中から弄る
|
50
|
-
(ダサいですがありって感じですかね)
|
51
54
|
|
55
|
+
ダサいですがありって感じですかね。
|
56
|
+
これもflags.testが勝手に書き換わるのが何処かは分かりかねますが、
|
57
|
+
testの引数がflagsを欲しがっている事が分かるので、まだ推測し易いと言えるでしょう。
|
58
|
+
|
52
59
|
```JavaScript
|
53
60
|
var test = function (flags) {
|
54
61
|
// 引数がオブジェクトや配列の場合参照渡し(※)になるので中から値を弄って変えられる
|
@@ -59,7 +66,7 @@
|
|
59
66
|
test: true
|
60
67
|
}
|
61
68
|
console.log("sample");
|
62
|
-
test();
|
69
|
+
test(flags);
|
63
70
|
if (flags.test) return; // 質問文的にこの1行が抜けないのであまり意味なし?
|
64
71
|
console.log("sample2");
|
65
72
|
}
|
@@ -67,12 +74,22 @@
|
|
67
74
|
```
|
68
75
|
|
69
76
|
4個目: 成功した時に今後やりたい動作を関数として定義してやる
|
70
|
-
(ちょっとトリッキーですが、質問文のやりたい事を素直に叶えるとこうなる感じ)
|
71
77
|
|
78
|
+
ちょっとトリッキーですが、これは多くのオブジェクト指向言語のDIコンテナに似た解決方法です。
|
79
|
+
|
80
|
+
JavaScriptは言語仕様的に関数が第一級オブジェクトなので、
|
81
|
+
配列等と同様に変数に格納・引数に設定・戻り値として返す事が可能です。
|
82
|
+
|
83
|
+
上級者が質問文の条件で何とかやれと言われたら、
|
84
|
+
testに関数を引数としてよこすようにし、こういう形で解決を目指すことになるかと思います。
|
85
|
+
|
72
86
|
```JavaScript
|
73
87
|
// 関数を引数にセットできる
|
74
88
|
var test = function (cb) {
|
75
|
-
//
|
89
|
+
// 条件を満たしたときのみコールバック関数を実行
|
90
|
+
if (true) {
|
91
|
+
cb();
|
92
|
+
}
|
76
93
|
}
|
77
94
|
var main = function () {
|
78
95
|
console.log("sample");
|
1
探偵さんをパワーアップ
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
最近妻(夫)が浮気してるような気がする。
|
8
8
|
探偵に頼もう(test関数)実行。
|
9
9
|
しばらくして探偵から連絡がありました。
|
10
|
-
探偵「いやあ、どうやら貴方の配偶者は浮気してたみたいなんで
|
10
|
+
探偵「いやあ、どうやら貴方の配偶者は浮気してたみたいなんで勝手に裁判してきました。これが和解金です。いやあ相場より若干少なかったですね。」
|
11
11
|
|
12
12
|
これくらい酷いことをやってます。
|
13
13
|
|