私のコードで出力として「2」を与えたいが、出力として「1」が表示される。 正しい結果が得られるように、コード内でどのような変更を行う必要があるか教えてください。JavaScriptの変数の範囲に関連する問題
var a = 1;
function x() {
var a = 2;
function b() {
var self = this;
console.log(self.a);
}
b();
}
x();
私のコードで出力として「2」を与えたいが、出力として「1」が表示される。 正しい結果が得られるように、コード内でどのような変更を行う必要があるか教えてください。JavaScriptの変数の範囲に関連する問題
var a = 1;
function x() {
var a = 2;
function b() {
var self = this;
console.log(self.a);
}
b();
}
x();
グローバル変数はそうself.a
あなたは1
self
がwindow
あるので与え、window
オブジェクトのプロパティです。 (さらに読む:How does the “this” keyword work?)。
ローカル変数は、どのオブジェクトのプロパティでもありません。あたかもオブジェクトのプロパティであるかのようにアクセスすることはできません。 a
を記録し、self.a
を記録しないでください。
これを試してみてください:
var a = 1;
function x() {
a = 2;
function b() {
var self = this;
console.log(self.a);
}
b();
}
x();
コードをちょっとだけインデントしてください。 – evolutionxbox
suggetionありがとう、しかし、私はなぜ人々が真の論理を持っているコードを投票しているのか分からない。 – RRajani
これは、答えよりもスポット・ザ・ゲームのようなものです。問題は正しい変数を読み取る方法で、1つの変数だけを使用する方法ではないようです。 – Quentin
がブラウザコンソールに "2" を印刷し、次のコードを試してみてください。ここでは、関数xをオブジェクトに変更しました。この中では、プロパティとして "a"を、関数として "b"を追加しました。最後にb()関数を "x.b()"として呼び出します。
var a = 1;
var x=
{
a :2,
b: function()
{
var self = this;
console.log(self.a);
}
}
x.b();
"a"だけを使用すると効果的です。しかし、 "2"を印刷する別の方法を教えてもらえますか? –
@PulkitAggarwal 'this'は使用しないでください。 – evolutionxbox
@PulkitAggarwal - なぜ「別の方法」が必要ですか?ちょうど 'a'は正しい*方法です。 – Quentin