2016-08-04 1 views
0

私はjavascriptのScopeチェーンの拡張を理解していません。 私は、誰もがいずれかの簡単な例を提供することができますjavascriptのスコープチェーンの拡張は何ですか?

function buildUrl(){ 
    var qs = "?debug=true"; 
    with(location){ 
    var url = href +qs; 
} 
    return url; 
} 

、それは私のために、より参考になっなり、例を見つけました:) 感謝:) :)

+0

'with'ブロックの中で' var'で宣言された変数は、その周囲のスコープ( 'buildUrl')に追加されます。 'with'は、この点を除いて、グローバルな' window'オブジェクトと同様の働きをします。 Btw、 'with'はJavascriptでは非推奨です。この[ブログ記事](http://www.2ality.com/2011/06/with-statement.html)をご覧ください。 – ftor

答えて

1

をJavaScriptのvarで、で起動するにはにスコープされますそれはで表示された機能、ないそれがであるブロックのであれば文が関数にスコープされる場合は内部で定義された任意のvar(if文のような)関数内のブロックがある:。

function foo() { 
 
    if (1 === 1) { 
 
    var output = "Something"; 
 
    } 
 
    console.log(output); 
 
} 
 

 
foo();

あなたはwithブロック内にあるとき、あなたはで動作するように、「コンテキスト」を指定します。あなたの場合、あなたはその場所で働いています。それはそれを見つけることができない場合は、変数を参照するとき、それは最初locationのコンテキストで変数を探します、それは関数スコープを見てみましょう:だから

function foo() { 
 
    var notInLocation = "something "; // Not as attribute of location 
 
    var pathname = "something else"; // Is as attribute of location 
 
    // the pathname in the location here seems to be "/js" 
 
    
 
    with (location) { 
 
    console.log(notInLocation + href); // href is a attribute of location and notInLocation isn't 
 
    console.log(pathname + href); // hred and pathname are both attributes in location 
 
    } 
 
} 
 

 
foo()

withブロックの場合、最初にlocation.qsを試して、名前がqsの属性を見つけられないので、関数スコープを調べて、先ほど定義した変数を選択します。

関連する問題