2017-04-03 9 views
-1

私のコードで出力として「2」を与えたいが、出力として「1」が表示される。 正しい結果が得られるように、コード内でどのような変更を行う必要があるか教えてください。JavaScriptの変数の範囲に関連する問題

var a = 1; 

function x() { 
    var a = 2; 

    function b() { 
    var self = this; 
    console.log(self.a); 
    } 

    b(); 
} 

x(); 

答えて

5

グローバル変数はそうself.aあなたは1selfwindowあるので与え、windowオブジェクトのプロパティです。 (さらに読む:How does the “this” keyword work?)。

ローカル変数は、どのオブジェクトのプロパティでもありません。あたかもオブジェクトのプロパティであるかのようにアクセスすることはできません。 aを記録し、self.aを記録しないでください。

+0

"a"だけを使用すると効果的です。しかし、 "2"を印刷する別の方法を教えてもらえますか? –

+1

@PulkitAggarwal 'this'は使用しないでください。 – evolutionxbox

+0

@PulkitAggarwal - なぜ「別の方法」が必要ですか?ちょうど 'a'は正しい*方法です。 – Quentin

-3

これを試してみてください:

var a = 1; 
 
function x() { 
 
    a = 2; 
 
    function b() { 
 
    var self = this; 
 
    console.log(self.a); 
 
    } 
 
    b(); 
 
} 
 
x();

+2

コードをちょっとだけインデントしてください。 – evolutionxbox

+0

suggetionありがとう、しかし、私はなぜ人々が真の論理を持っているコードを投票しているのか分からない。 – RRajani

+0

これは、答えよりもスポット・ザ・ゲームのようなものです。問題は正しい変数を読み取る方法で、1つの変数だけを使用する方法ではないようです。 – Quentin

0

がブラウザコンソールに "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();