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

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

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

在 JavaScript 中,没有块级作用域;仅功能级别的范围。举两个例子:

if (true) {
    var a = 5;
}

alert(a); // 5

// ...

function foo() {
    var a = 5;
}

foo();

alert(a); // ReferenceError: a is not defined
于 2012-09-03T01:37:07.250 回答