为什么在外部访问时声明变量?

时间:2012-09-03 01:31:50

标签: javascript with-statement

代码是:

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

变量urlwith中声明,但它可以访问外部,为什么?

3 个答案:

答案 0 :(得分:4)

因为var url;被提升到功能块的顶部。 JavaScript没有块级范围,只有闭包级(函数)。

答案 1 :(得分:2)

请参阅此答案:https://stackoverflow.com/a/185283/548696

问题在于,此块中定义的变量是限定为此块的(仅在with之后将包含的对象)。

要实现块级范围,请执行以下操作:

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

或者更确切地说使用let statement,因为with被认为是有害的:

let (url = href + "aaa"){
    // url available here
}
// but not here

答案 2 :(得分:2)

在JavaScript中,没有块级范围;只有功能级别的范围。拿这两个例子:

if (true) {
    var a = 5;
}

alert(a); // 5

// ...

function foo() {
    var a = 5;
}

foo();

alert(a); // ReferenceError: a is not defined