回答編集履歴
3
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
変数の「ホイスティング(巻上げ)」による影響(かつ、varを使っている影響)によります。
|
4
4
|
|
5
|
-
関数の中で宣言され
|
5
|
+
質問のコードの場合、関数fnの中でvarで宣言されている変数bookは、その関数fnの先頭部分で宣言されたものと解釈されます(=var/巻上げ)。
|
6
6
|
|
7
7
|
たとえば、var book = 'book2’;がある場合、質問のコードは下記のように解釈されます。
|
8
8
|
```js
|
2
test
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
```
|
15
15
|
|
16
16
|
console.log(book); を実行する時点では、book は宣言されてるだけなので、undefinedになります。
|
17
|
+
|
17
18
|
|
18
19
|
|
19
20
|
一方、var book = 'book2’;がない場合、具体的には
|
@@ -34,13 +35,14 @@
|
|
34
35
|
> また、以下のコードの if(true)につきまして、もし〇〇がtrueの場合、a = ‘Hello’;を実行せよの意味だと理解しているのですが、以下の場合の〇〇は何になるのでしょうか?
|
35
36
|
|
36
37
|
→「もし〇〇がtrueの場合」と言う部分は、正しくは
|
37
|
-
「if の括弧の中の評価結果が、偽値 (falsy) として定義された値 (つまり、false, 0, -0, 0n, "", null, undefined, NaN) を除くすべての値
|
38
|
+
「if の括弧の中の評価結果が、偽値 (falsy) として定義された値 (つまり、false, 0, -0, 0n, "", null, undefined, NaN) を除くすべての値 の場合」です。
|
38
39
|
|
39
|
-
質問のコードの場合 if()の括弧の中が、trueというfalsyではない
|
40
|
+
質問のコードの場合 if()の括弧の中が、trueという「falsyではない値」なので、
|
40
41
|
a = ‘Hello’ が実行されます。
|
41
42
|
|
42
|
-
「truthy」
|
43
|
+
「falsy」「truthy」については下記を見てください。
|
44
|
+
https://developer.mozilla.org/ja/docs/Glossary/Falsy
|
43
45
|
https://developer.mozilla.org/ja/docs/Glossary/Truthy
|
44
|
-
https://developer.mozilla.org/ja/docs/Glossary/Falsy
|
45
46
|
|
46
47
|
|
48
|
+
|
1
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> 上記の実行結果は、var book = 'book2’;を入れますと、undefinedになってしまい、var book = 'book2’;がないと、実行結果は、book1になります。私の想定では、var book = 'book2’;がある場合でも、ない場合でも、実行結果は、book1となると思うのですが、なぜvar book = 'book2’;を入れますと、undefinedになるのでしょうか。
|
2
2
|
|
3
|
-
変数の「ホイスティング(巻上げ)」って
|
3
|
+
変数の「ホイスティング(巻上げ)」による影響(かつ、varを使っている影響)によります。
|
4
4
|
|
5
5
|
関数の中で宣言された変数は、その関数の先頭部分で宣言されたものと解釈されます(=巻上げ)。
|
6
6
|
|