2016-10-26 13 views
0

私は次のコードで特定の変数aを取得する方法を理解することができませんよ。上書きされた関数で上書きされた変数にどのようにアクセスする必要がありますか?

var a = 1; 
console.log(a); 

function local() { 
    var a = 2; 
    console.log(a); 
    function local() { 
    var a = 3; 
    console.log(a); 
    function local() { 
     var a = 4; 
     console.log(a) 
    } 
    local(); 
    } 
    local(); 
} 
local(); 

私は、これは人工的な例である知っているが、私は答えずにスリープ状態に入ることができません:)

どのように特定の変数aを上書きされた関数から取得する必要がありますか?おかげさまで

+1

関数スコープ内で 'var'を使用して宣言された変数は、その関数スコープにバインドされています。返さない限り、関数スコープ外にはアクセスできません。 –

+2

"医師、これは痛いです。 "そうしないで"。 – Quentin

答えて

2

変数と同じ名前の変数を上位スコープに宣言すると、新しい宣言でスコープ付き変数が隠され、そのスコープの高い変数にローカルスコープからアクセスする方法はありません。

これはJavascriptの設計方法です。その周りには魔法がありません。スコープの高い変数にアクセスする場合は、同じ名前のローカル変数を宣言しないでください。別の名前を選んでください。

一番上の変数がグローバルスコープにある場合は、window.aglobal.aなどのグローバルプレフィックスを持つ変数にアクセスすることができます(実行環境によって異なります)。しかし、グローバルスコープにない中間変数にはアクセスできません。

1

あなたはこの

var aa=11; 
function my_func(){ 
    var aa=22; 
    alert("local: "+aa+" global: "+window.aa); 
} 

ようwindowオブジェクトによってグローバル変数にアクセスすることができますが、彼らは本当にそこに存在していないとして、関数の外のローカル変数にアクセスする方法はありません!

関連する問題