これはちょうど私の心を吹いた:ローカル変数は同じ名前のパラメータを上書きしませんか?
function f(x) {
var x;
console.log(x); // prints 100!
}
f(100);
私はいつもあなたがローカル変数を宣言したときに、前に宣言されたのと同じ名前を使って何がそれの後ろに隠れてしまうことを考えるために使用されます。なぜvar x
は他の状況でやったのと同じようにx
undefined
を作っていないのですか?
var x = 100;
function f() {
var x;
console.log(x); // prints undefined as expected
}
f();
'var'宣言は基本的に無視されます。 – Pointy
2つの異なるスコープが関係しているため、2番目のコード例は関係ありません。関数宣言の仮引数リストは、関数の字句的範囲内のパラメータシンボルの 'var'宣言と事実上同じことをします。 – Pointy
'The local var' - このフレーズは、あなたがローカル変数が本当に何かを誤解していると思います。関数の引数もローカル変数です。ですから、基本的にこれは次のようなことです: 'var x = 100; var x'はjavascriptで合法で、人々がforループなどで 'var'を宣言できるようにします。 – slebetman