変数の巻き上げについてです。
変数の巻き上げという挙動について最近知ったのですが、
まず以下のサイトに記述されているコードです。
http://analogic.jp/hoisting/
javascrip
1var myname = "global"; 2 3function func() { 4 console.log(myname); //出力内容は?undefined 5 var myname = "local"; 6 console.log(myname); //出力内容は?local 7} 8 9func();
「最初のコード例の5行目の変数宣言
var myname = "local";
が巻き上げられ、関数の先頭で宣言されたように扱われます。ただし、巻き上げられるのは宣言部分のみなので、この時点ではその中身(= “local”)の代入までは行われません。つまり関数の先頭部分は
var myname;
となり、これは
var myname = undefined;
と同じ意味ですので、最初のconsole.logでは「undefined」が出力された、ということです。」
とのことだったのですが、以下のteratailでの質問の答えを見て訳が分からなくなってしまいました。
https://teratail.com/questions/241241
javascrip
1{ // A 2 let x = 0; 3 { // B 4 console.log( x ); // (2) 5 } 6}
「上記のコード、(2)で変数xを参照していますが、やはりここでJavaScriptは変数xを探しに行きます。
まず、参照しているスコープ、Bの中で探したところ、定義文が見つかりませんでした。
そこで、その外側のスコープ、Aの中で探したところ、let x = 0;という定義文が見つかりました。
なので、(2)の変数xは、スコープAのlet x = 0;で定義されている変数だ、とJavaScriptは判断します。」
とあります。この場合undefinedと表示されないのは何故なのでしょうか。
###追記
そもそも入れ子になっているスコープを別物、と捉えており余計ややこしい質問となりました..!
すいませんでした!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 02:42
2020/07/20 03:05 編集
2020/07/20 04:07
2020/07/20 04:13