2017-10-11 4 views
-2

Ich habe kleine Funktion logisch Ausgang sollte 1 sein, aber ich bekomme 10 .. Kann mir jemand mit dieser Logik helfen.JavaScript Logic Guide

var a=1; 
function foo() { 
    if(!a){ 
     var a=10; 
    } 
    console.log(a); 
} 
foo(); 

Ausgabe kommt 10 nicht 1. Wie.

+0

Ich würde vorschlagen, zuerst selbst zu recherchieren. – maxpaj

+0

Sie haben 2 Variablen mit dem Namen "a". Warum? – Lexi

+0

@ Lexi- das ist die Frage. Wenn ich eine habe dann dnt gehe in wenn Bedingung, wenn nicht ist deklarieren dann deklarieren a .. –

Antwort

1

Zusätzlich interpretieren, wie in anderen Antworten erwähnt, denken Sie daran, dass, wenn ES6 schriftlich (per let oder const verwenden) Code verhalten wie du es erwartest.

Warum passiert das? Weil let und const Block-Level-Scoping und nicht Funktionsebene-Scoping haben.

let a = 1; 
 

 
function foo() { 
 
    if (!a) { 
 
    let a = 10; 
 
    } 
 
    console.log(a); 
 
} 
 

 
foo();

Aus diesem Grund, wenn Sie einen JavaScript-Fusseln Mechanismus verwenden, wie ESLint, Sie Regeln wie vars-on-top (https://eslint.org/docs/rules/vars-on-top) speziell für diese Art von Problemen zu vermeiden, sehen werden.