コードは次のとおりです。
with(location)
{
var url=href+"aaa";
}
alert(url);
変数はでurl
宣言しますwith
が、外部にアクセスできるのはなぜですか?
コードは次のとおりです。
with(location)
{
var url=href+"aaa";
}
alert(url);
変数はでurl
宣言しますwith
が、外部にアクセスできるのはなぜですか?
なぜならvar url;
、機能ブロックの上部に持ち上げられているからです。JavaScriptにはブロックレベルのスコープはなく、クロージャーレベル(関数)のみがあります。
この回答を参照してください: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