javascriptのスコープについて
javascriptのスコープについてです。
曖昧な知識のままだったので、まとめます。
ブロックスコープ
ブロックでのスコープという概念がありません。
{ var i = 5; } console.log(i); =>5
このように平気でアクセスできてしまいます。
rubyだとブロックの中の変数は外からは参照することができません。
Proc.new do x = 1 end p x =>NameError: undefined local variable or method `x' for main:Object
関数のスコープで制限する
そこで編み出された手法が、関数の中はスコープが存在するので、関数の中に閉じ込めるという手法です。
(function(){ var i = 5; console.log(i); }).call(this); console.log(i) =>Uncaught ReferenceError: i is not defined
先人の人たちはよくこんなことを思いついたものだ。
さすがにこの技ばかりでは可読性がないので、ES2015からは状況が変わりました。
let constでスコープを定める
{ let i = 5; console.log(i); } console.log(i) =>Uncaught ReferenceError: i is not defined
このようにスコープできるようになりました。
以上です。