var myname = "global";
function func() { //1
console.log(myname); //undifined ///2
var myname = "local";
console.log(myname); //local
}
func();
jsによってvar myname
だけが関数の先頭である1と2の間で実行される
宣言をlet
にすると
let myname = "global";
function func() {
console.log(myname); //ReferenceError: Cannot access 'myname' before initialization
let myname = "local";
console.log(myname); //エラーで実行されない
}
func();
このようになり関数の巻き上げを防ぐことが出来る。
だからES6のlet
とconst
を使って宣言するべきなのかと
参考
https://developer.mozilla.org/ja/docs/Glossary/Hoisting
https://analogic.jp/hoisting/