2017-09-12 5 views
0
function foo(a) { 
    function a() { 
    return 8; 
    } 
    return a(); 
    y = 9; 
} 
console.log(foo() + " " + y); 

これは、変数yの定義されていないエラーを示します。JavaScript内の変数のスコープ

function foo(a) { 
    y = 9; 

    function a() { 
    return 8; 
    } 
    return a(); 
} 
console.log(foo() + " " + y); 

これは、ブラウザコンソールに8 9を表示します。

varキーワードを持たない変数を宣言すると、グローバル変数になります。

なぜ最初の機能がそのアイデアに従っていないのですか?

+0

スタックオーバーフローに関する質問をする前に、いくつかの調査をしてください。 _ literalally_ Googleでこの質問のタイトルをコピーして貼り付けると、リンクされた複製が見つかりました。 – Cerbrus

+0

@Cerbrusそれは可変スコープとは無関係であり、確かにその複製ではありません。 – MrCode

+0

strictモードを使用し、2番目のスニペットも同様に例外をスローします。 'var'を使わないでください。適切なスコープで' var'を使うだけです! – Bergi

答えて

0

y = 9の前には、最初の例ではreturnのステートメントがあるため、割り当てが決して決まらず、定義されていないためです。

+0

これらのような明白な複製にはお答えください。何も研究をしないようにユーザーに励ましたり報いたりしないでください。 – Cerbrus

+0

@Cerbrusそれはその複製ではありません。 – MrCode

+1

それは[this]の欺瞞です(https://stackoverflow.com/questions/14102912/execute-statement-after-return-statement-in-javascript)。私の要点は、OPは質問する前に実際にいくつかの調査を行うべきだということです。 – Cerbrus

関連する問題