なぜ次のコードは1で、10ではないのですか? return文があるにもかかわらず、関数bar()が値を変更しないのはなぜですか?関数に関数を作成するにはどうすればよいですか?
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {}
}
bar();
alert(foo);
なぜ次のコードは1で、10ではないのですか? return文があるにもかかわらず、関数bar()が値を変更しないのはなぜですか?関数に関数を作成するにはどうすればよいですか?
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {}
}
bar();
alert(foo);
function
定義は、その範囲の一番上に掲揚されているので、これはですので、bar()
内部のfooの割り当ては、実際には、空のボディを持つローカル関数を参照しています。
これについてさらに読むことができますhere
bar
の上bar
移動内部foo
関数宣言をコンパイルしながらためです。このように
var foo = 1;
function bar() {
function foo() {}
foo = 10;
return;
}
bar();
alert(foo);
約hoisting in JSについて読んでください。 「VAR巻き上げ」セクションで そしてhere