上記の実行結果は、var book = 'book2’;を入れますと、undefinedになってしまい、var book = 'book2’;がないと、実行結果は、book1になります。私の想定では、var book = 'book2’;がある場合でも、ない場合でも、実行結果は、book1となると思うのですが、なぜvar book = 'book2’;を入れますと、undefinedになるのでしょうか。
変数の「ホイスティング(巻上げ)」による影響(かつ、varを使っている影響)によります。
質問のコードの場合、関数fnの中でvarで宣言されている変数bookは、その関数fnの先頭部分で宣言されたものと解釈されます(=var/巻上げ)。
たとえば、var book = 'book2’;がある場合、質問のコードは下記のように解釈されます。
js
1function fn() {
2 var book; // 変数のホイスティング
3 console.log(book);
4 book = 'book2';
5}
console.log(book); を実行する時点では、book は宣言されてるだけなので、undefinedになります。
一方、var book = 'book2’;がない場合、具体的には
js
1var book = 'book1';
2function fn() {
3 console.log(book);
4}
5fn();
この場合、関数内の「book」は、先頭で宣言されているグローバル変数である「book」を指すと解釈されるため、
「book1」と表示されます。
(関数内で var book = 'book2’;がある場合、bookは、関数内のローカル変数となってしまう)
また、以下のコードの if(true)につきまして、もし〇〇がtrueの場合、a = ‘Hello’;を実行せよの意味だと理解しているのですが、以下の場合の〇〇は何になるのでしょうか?
→「もし〇〇がtrueの場合」と言う部分は、正しくは
「if の括弧の中の評価結果が、偽値 (falsy) として定義された値 (つまり、false, 0, -0, 0n, "", null, undefined, NaN) を除くすべての値 の場合」です。
質問のコードの場合 if()の括弧の中が、trueという「falsyではない値」なので、
a = ‘Hello’ が実行されます。
「falsy」「truthy」については下記を見てください。
https://developer.mozilla.org/ja/docs/Glossary/Falsy
https://developer.mozilla.org/ja/docs/Glossary/Truthy
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/01/12 15:45