「You Do not Know JS」シリーズの「Scope & Closures」という本を読んでいます。 は、このコードスニペットを通って行く:この場合レキシカルスコープの問題
function foo() {
var a = 2;
function bar() {
console.log(a); // 2
}
bar();
}
foo();
、関数bar()のトップに掲揚されてはいけないと、このコードは、エラーを生成する必要がありますか?巻き上げた後、このコードは次のようにする必要がありますので、関数はトップと後で変数に掲揚されているため、これがある
function foo() {
function bar() {
console.log(a);
}
var a;
a = 2;
}
(少なくとも私が理解するもの)。そうでない場合は、私を修正してください。
'console.log(a)'は 'bar()'が呼び出されるまで実行されません。その時まで 'a 'にアクセスしようとはしないので、' var a; 'は' bar() 'を呼び出そうとする前に処理されています。 –