回答編集履歴
5
もうちっと正確に?
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
なお、引数をなくす意味ですが、`id`という引数は変数`count`と同じくクロージャーによって内部関数である`countDownStart()`で**使用できます**。わざわざ引数として渡す必要はありません。もし、どうしても引数を付けたい場合は`countDownStart.bind(this, id)`(`this`の部分は今回使用していないので何でもいいです)と[`bind()`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)を用いて引数が束縛された新たな関数を作る必要
|
25
|
+
なお、引数をなくす意味ですが、`id`という引数は変数`count`と同じくクロージャーによって内部関数である`countDownStart()`で**使用できます**。わざわざ引数として渡す必要はありません。もし、どうしても引数を付けたい場合は`countDownStart.bind(this, id)`(`this`の部分は今回使用していないので何でもいいです)と[`bind()`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)を用いて引数が束縛された新たな関数を作ったり、無名関数で囲って新たな関数にする等の対応が必要になります。
|
26
26
|
|
27
27
|
|
28
28
|
|
4
セミコロン
test
CHANGED
@@ -34,6 +34,6 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
1. 実行されるscriptタグは最後(bodyの終了タグ直前)に書くことを推奨します。最後に書くと、jQueryでの`$(funciton{...})`と実質同じ効果が得られます。今回は`setInterval()`によって1000ミリ秒後にしかspanの部分を見に行かないためうまくいきますが、今回のような書き方だと、script内が最初に実行されるときに、spanの部分を**まだブラウザが認識していない**ということに注意してください。
|
37
|
+
1. 実行されるscriptタグは最後(bodyの終了タグ直前)に書くことを推奨します。最後に書くと、jQueryでの`$(funciton{...});`と実質同じ効果が得られます。今回は`setInterval()`によって1000ミリ秒後にしかspanの部分を見に行かないためうまくいきますが、今回のような書き方だと、script内が最初に実行されるときに、spanの部分を**まだブラウザが認識していない**ということに注意してください。
|
38
38
|
|
39
39
|
2. function宣言の**巻き上げ**により関数定義が後ろの方にあっても動作しますが、巻き上げの影響を十分理解していなければ、そのような書き方は推奨できません。関数は呼び出される場所よりも前に書くことを推奨します。
|
3
仮引数を無くすの意味
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
動作しない理由は、setIntervalの第一引数で、**関数そのもの**を渡しているのでは無く**関数を実行した結果**を渡しているからです。`countDownStart()`関数から仮引数を無くし、`setInterval(countDownStart,1000);`と書けば、動作すると思います。
|
1
|
+
動作しない理由は、setIntervalの第一引数で、**関数そのもの**を渡しているのでは無く**関数を実行した結果**を渡しているからです。`countDownStart()`関数の定義から仮引数を無くし(つまり、`funciton countDownStart() {...}`と書くと言うこと)、`setInterval(countDownStart,1000);`と書けば、動作すると思います。
|
2
2
|
|
3
3
|
|
4
4
|
|
2
誤字の修正ともうちょっとわかりやすく?
test
CHANGED
@@ -14,11 +14,11 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
もうちょっと詳しく言います。`setInterval(countDownStart(id),1000);`を評価するとき、まず、それぞれの引数を評価します。引数は、`countDownStart(id)`と`1000`です。`countDownStart(id)`の評価では、idを引数に`countDownStart()`を**実行(呼び出)**して、その戻り値であるundefined値に置き換わります。`1000`は数値リテラルですのでその評価結果も1000を表す数値です。よって、引数の評価により、`setInterval(undefined値,1000という数値);`となってから、`setInterval()`が評価されます。第一引数の値はundefined値ですので、1000ミリ秒経っても何もされません。
|
17
|
+
もうちょっと詳しく言います。`setInterval(countDownStart(id),1000);`を評価するとき、まず、それぞれの引数を評価します。引数は、`countDownStart(id)`と`1000`です。`countDownStart(id)`の評価では、idを引数に`countDownStart()`を**実行(呼び出)**して、その戻り値であるundefined値に置き換わります。`1000`は数値リテラルですのでその評価結果も1000を表す数値です。よって、引数の評価により、`setInterval(【undefined値】,【1000という数値】);`となってから、`setInterval()`が評価されます。第一引数の値はundefined値ですので、1000ミリ秒経っても何もされません。
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
では、`setInterval(countDownStart,1000);`と書いた場合はどうなるかというと、`countDownStart`は関数そのものを指し示す変数ですので、その評価の結果も関数そのものです。つまり、引数の評価後も`setInterval(countDownStartという関数,1000とう
|
21
|
+
では、`setInterval(countDownStart,1000);`と書いた場合はどうなるかというと、`countDownStart`は関数そのものを指し示す変数ですので、その評価の結果も関数そのものです。つまり、引数の評価後も`setInterval(【countDownStartという関数】,【1000という数値】);`となります。ですので、1000ミリ秒経つと、第一引数の関数そのものが実行(呼び出)されます。
|
22
22
|
|
23
23
|
|
24
24
|
|
1
理由と、補足
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
setIntervalの第一引数で、**関数そのもの**を渡しているのでは無く**関数を実行した結果**を渡しているからです。`countDownStart()`関数から仮引数を無くし、`setInterval(countDownStart,1000);`と書けば、動作すると思います。
|
1
|
+
動作しない理由は、setIntervalの第一引数で、**関数そのもの**を渡しているのでは無く**関数を実行した結果**を渡しているからです。`countDownStart()`関数から仮引数を無くし、`setInterval(countDownStart,1000);`と書けば、動作すると思います。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -23,3 +23,17 @@
|
|
23
23
|
|
24
24
|
|
25
25
|
なお、引数をなくす意味ですが、`id`という引数は変数`count`と同じくクロージャーによって内部関数である`countDownStart()`で**使用できます**。わざわざ引数として渡す必要はありません。もし、どうしても引数を付けたい場合は`countDownStart.bind(this, id)`(`this`の部分は今回使用していないので何でもいいです)と[`bind()`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)を用いて引数が束縛された新たな関数を作る必要があります。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
【補足】
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
その他の注意事項を書いておきます。
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
1. 実行されるscriptタグは最後(bodyの終了タグ直前)に書くことを推奨します。最後に書くと、jQueryでの`$(funciton{...})`と実質同じ効果が得られます。今回は`setInterval()`によって1000ミリ秒後にしかspanの部分を見に行かないためうまくいきますが、今回のような書き方だと、script内が最初に実行されるときに、spanの部分を**まだブラウザが認識していない**ということに注意してください。
|
38
|
+
|
39
|
+
2. function宣言の**巻き上げ**により関数定義が後ろの方にあっても動作しますが、巻き上げの影響を十分理解していなければ、そのような書き方は推奨できません。関数は呼び出される場所よりも前に書くことを推奨します。
|