2017-10-05 4 views
0

コンソールは2回を記録globalscopeに漏れるが、それは最初にconsole.log(boxSize)を表示する必要がboxSizeが

var size = 100; 
if (size > 50) { 
    var boxSize = size * 5; 
    console.log(boxSize); 
} 
console.log(boxSize); 
+0

あなたは 'boxSize'を宣言するときには、代わりにvar''の 'let'使用する必要があるとして、それは作品にconsole.logの1(boxSize) –

+0

を削除する必要があります。 「ブロックスコープルール」を確認してください。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block – Walk

答えて

2

これははJavascriptでを巻き上げ呼ばれる動作です。

巻き上げは、変数や関数 宣言は、コード 実行する前に、その範囲の先頭に移動されているJavaScriptのメカニズムです。

varはjavascriptでブロックスコープではありません。 ES6でキーワードletまたはconstを使用して、宣言されたブロックでのみ使用可能な変数を宣言することができます。

var size = 100; 
if (size > 50) { 
    let boxSize = size * 5; 
    console.log(boxSize); 
} 
console.log(boxSize);// Uncaught ReferenceError: boxSize is not defined 
0

私は違いがある。この

ため、VARの上に聞かせて使用することをお勧めしますスコープ。 varは最も近いファンクションブロックにスコープされ、letはファンクションブロックよりも小さい可能性のある最も近い囲むブロックにスコープされます。ブロックの外側にある場合は両方ともグローバルです。

SRC:https://stackoverflow.com/a/11444416/4891666

例:

var size = 100; 
 

 
/* Using Var */ 
 
if (size > 50) { 
 
    var varExample = size * 5; 
 
    console.log("With var inner: " + varExample); 
 
} 
 
console.log("With var outer: " + varExample); 
 

 
/* Using Let */ 
 
if (size > 50) { 
 
    let letExample = size * 5; 
 
    console.log("With let inner: " + letExample); 
 
} 
 
console.log("With let outer: " + letExample);

0

let size = 100; 
 
if (size > 50) { 
 
    let boxSize = size * 5; 
 
    console.log(boxSize); 
 
} 
 
console.log(boxSize); 
 
/* Es6 let declers a block scope 
 
    local variable(not function level scope like var) 
 
    */ 
 
    //trying to access the variable in the block before the variable declaration resulsts in a ReferenceError

関連する問題