1

コードは次のとおりです。

with(location)
    {
        var url=href+"aaa";    
    }
alert(url);

変数はでurl宣言しますwithが、外部にアクセスできるのはなぜですか?

4

3 に答える 3

4

なぜならvar url;、機能ブロックの上部に持ち上げられているからです。JavaScriptにはブロックレベルのスコープはなく、クロージャーレベル(関数)のみがあります。

于 2012-09-03T01:33:52.823 に答える
2

この回答を参照してください:https ://stackoverflow.com/a/185283/548696

問題は、このブロック内で定義された変数がこのブロックにスコープされていないことです(後に囲むオブジェクトのみがスコープされますwith)。

ブロックレベルのスコープを実現するには、次のようにします。

with({"url": href+"aaa"}) {
    // url is available here    
}
alert(url); // but not here

または、有害であると見なされるletステートメントを使用します。with

let (url = href + "aaa"){
    // url available here
}
// but not here
于 2012-09-03T01:35:35.453 に答える