次のコードでは、なぜ変数x.bにアクセスできますか?ローカルスコープを持つべきではありませんか?JavaScript関数の可変スコープ
CODE
function x() {
var a = 3;
}
x.b = 8;
console.log(x.a);
console.log(x.b);
OUTPUT
undefined
8
次のコードでは、なぜ変数x.bにアクセスできますか?ローカルスコープを持つべきではありませんか?JavaScript関数の可変スコープ
CODE
function x() {
var a = 3;
}
x.b = 8;
console.log(x.a);
console.log(x.b);
OUTPUT
undefined
8
あなたはx
のコンストラクタ内a
を宣言するvar
を使用すると、a
はあなたがx.b
を行うときしかしあなたは、プライベートとしてマークされます本質的に言って - プロパティb
をオブジェクトに追加するx
。したがって
あなたが技術的にあなたが8
しかし、 'x'はここのコンストラクタではなく、そのコンストラクタとしても使われていません。それは単純な古い関数です。 –
@トラザブロ正しい。 'x'は単なる古い関数です。私は最後のどこかで 'new'キーワードを見たと思っていました...うーん、私は疲れているはずです:( –
あなたは8にx.bを定義して、それがグローバルVARとなっているオブジェクトx
のプロパティb
に、アクセスしているx.b
を話すん。つまりどこからでもアクセスできます。
したがって、x()は独自のスコープを持つ関数です。したがって、上記の方法で関数スコープ内の変数にアクセスすることはできません。しかし、これを実行してx関数を呼び出すことで、 'a'にアクセスすることができます。
function x() {
var a = 3;
return a;
}
' x.b'は**グローバルではありません** 'x'というオブジェクトのプロパティです。 –
Javascriptがグローバルオブジェクトとしてx.b見なします。
x.b = 8;
function x() {
var a = 3;
alert(x.b)
}
x();
console.log(x.a);
console.log(x.b);
しかし、関数宣言の前に必ずx.bを指定してください。
オブジェクトaは関数x()の中で指定されているため、非公開にしていますが、なぜconsole.log(x.a)の結果が未定義になっていますか?
あなたはこのようにそれを書いた場合:
a = 5;
function x() {
var a = 3;
}
x.b = 8;
alert(a);
alert(x.b);
あなたが怒鳴るような結果が得られます:
5
8
javascriptのAとX.Aのための2つの別々のオブジェクトです。
私は、あなたがアクセス可能なオブジェクトであり、新しいプロパティ "b"を与えただけだと思います。 –
'x'と' x.b'の両方がグローバルスコープで定義されました。では、なぜ彼らに「ローカルスコープ」があると思いますか? – str
いくつかの基本的な誤解があるようです。ドット表記法はローカル変数にアクセスしません。 –