2016-02-05 6 views
5

ブラウザのコンソールで、var x=10と入力するとundefinedと表示され、x=10と入力すると10と表示されます。両方とも同じタスクを実行し、その違いは何ですか? varを使用していてvarを使用していないことに違いはありませんか?ブラウザコンソールで入力したときのvar x = 10とx = 10の違いは何ですか?

+3

何も... 'のx = 10 'ので10は、コンソール...あなたが言うとき、' VAR xに印刷された値を返します= 10 'の場合、値は返されないので、 'undefined'が表示されます –

答えて

3

eval

var output = eval('x = 10'); 
console.log(output)   // 10 

を使用する場合は、ブラウザのコンソールにあるので、あなたは、グローバルスコープでaleradyある少し良く何が起こっているのかを見ることができます変数の有無にかかわらず、変数の格納方法に違いはありません。

Prove

しかし、=リターン sのあなたが割り当てられた値演算子であり、そうa = 1は1と評価され、あなたがb = 2を入力したときに2を参照してください。 var何も返さない、それは式ではない文です。ブラウザENVで

+1

おそらくいくつかの参照:[*割り当てランタイムセマンティクス*](http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation ) - 代入式は右手の値を返します。 [*変数宣言ランタイムセマンティクス*](http:// www。ecma-international.org/ecma-262/6.0/#sec-variable-statement-runtime-semantics-evaluation)-成功した場合は、* undefined *を返します。 – RobG

0

var x = 10;現在のスコープの値を設定します(関数の中の例として)。

x = 10;グローバルスコープの値を設定するので、どこにでもアクセスできます。

+1

ブラウザのコンソール –

+0

私は知っていますが、それは問題ではありません。また、コンソール内の関数を変数で入力することもできます。この場合、ブラウザコンソールスコープはグローバルスコープと同じであるため、問題はありません。 – seahorsepip

+0

あなたは質問のポイントを見逃しました。 OPは、コンソールがなぜ1つのケースでは "undefined"で、もう1つのケースでは "10"で応答するのかを尋ねています。 – nnnnnn

0

varが関数または他の非グローバルスコープ内で使用されている場合、その変数はグローバル変数ではありません。 varが変数名の前に使用されていない場合、グローバル変数が作成されます。

/

/ These are both globals 
var foo = 1; 
bar = 2; 

function() 
{ 
    var foo = 1; // Local 
    bar = 2;  // Global 

    // Execute an anonymous function 
    (function() 
    { 
     var wibble = 1; // Local 
     foo = 2; // Inherits from scope above (creating a closure) 
     moo = 3; // Global 
    }()) 
} 

あなたは割り当てを行っていない場合、あなたはVARを使用する必要があります。

var x; // Declare x 
+1

この質問以外は、2つの異なる行*をコンソール*に入力したときの動作をブラウザコンソールが表示する理由です。 – nnnnnn

+0

これは私が尋ねたものではありません – Nitin9791

2

EXPLANATION

場合x = 10

これは、変数を作成します値012を持つxという名前のグローバルスコープ。 さらに、これは値10を返す式です。これはちょうどそう であることを起こる現在のスコープ内の変数を作成します

:値10

場合var x = 10xyの両方を設定しますvar x = y = 10;のようなことを行うことができるようにするために、これは便利ですグローバルスコープはxで、値は10です。 構文varで作成されているため、式として評価できないため、undefinedがコンソールに出力されます。

概要

他の場所に存在しますが、コンソールからvar x = 10x = 10を書くの効果に違いはありません。後者は、厳密モードでも許可されていません。ただし、実行すると出力がないため、undefinedが返されますが、x=10が式であるため、2番目の出力は10を返します。

あなたは

var output = eval('var x = 10'); 
console.log(output)   // undefined 
0
// they both define var x and set it value to 10,but they are diff about below 

// x is globally 
x = 10 

// x is scopely 
var x = 10 

は、世界的に平均VaRは、それが変数をグローバルに定義引き起こす可能性がありますオブジェクトwindowのプロパティ

として定義しかし、最初のコードの使用について注意が必要です。 strict mode

そして、それならばが暗黙的にグローバルが許可されていない定義されたので、これは、に動作しません。

+0

OPは、2つのバージョンが何をするのか、そして範囲について理解しています。問題は、なぜそれらの行がコンソールに入力されたのか*コンソールが異なる応答を出す理由です。 – nnnnnn

1

シナリオ1:10には、ブラウザのコンソールによって返されるint型の値であるため、

は、ブラウザのコンソール上のx = 10を入力しているときに10を取得している基本的に参照してください。

シナリオ2: ブラウザコンソールでvar x = 10と入力すると、各コマンドの戻り値が表示され、このシナリオでは何も返されないため「未定義」になります。ここではより多くのリファレンス訪問のため

、さらに:

http://blog.modulus.io/absolute-beginners-guide-to-nodejs

関連する問題