2017-07-06 12 views
1

現在JavaScriptのスコープを学習していて、JavaScriptで非グローバルなシャドウ変数にアクセスすることが可能かどうか疑問に思っていましたか?つまり、以下の例では、変数aaFunc機能にJavaScript以外のグローバル変数にアクセスする方法があります

var a = 1; 
function aFunc(){ 
    var a = 10; 
    function innerFunc(){ 
     var a = 100; 
     console.log("innerFunc a = " + a); 
     console.log("is it possible to access outer function's a variable?"); 
     console.log("global a = " + window.a); 
    } 
    innerFunc(); 
} 
aFunc(); 

PS 10に等しいこと - 私は同じ名前を使用して変数の命名理解は非常に悪い習慣ですが、私は好奇心から、この質問を推測します

答えて

1

いいえ、少なくともJavaScriptでこれを行うことはできません。あなたがそれを意図的に隠してしまったのでアクセスすることはできません(機能として受け入れます))。 Javascriptには、レキシカルスコープの変数にアクセスするためのメカニズムがありません(1ステップアップ)。

+0

こんにちはSuresh、助けてくれてありがとう!私はちょうど不思議だった、なぜあなたはjavascriptがこの機能を提供していないのか知っていますか?言い換えれば、このデザインの理由は何ですか? (私はJavaのバックグラウンドを持っていて、Javaでは多くのレベルのシャドウ変数にアクセスできます)。 – Thor

+1

@CaptainAmericaこれはJSがどのように動作するのかということであり、 '単語「字句」とは、レキシカルスコープがソースコード内で変数が宣言されている場所を使用して、その変数がどこにあるかを判断するということです。最新の値を持つinit –

+1

@CaptainAmericaところで、Javaには入れ子関数はありません。あなたは内部クラスを意味しますか?または匿名の内部クラス? –

関連する問題