为什么在中声明具有外部访问权限的变量

Why declare variables in with outside access to?

本文关键字:访问权 访问 权限 变量 外部 声明 为什么      更新时间:2023-09-26

代码为:

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

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

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

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

if (true) {
    var a = 5;
}
alert(a); // 5
// ...
function foo() {
    var a = 5;
}
foo();
alert(a); // ReferenceError: a is not defined

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

问题是,在这个块中定义的变量是这个块的nit范围(只有在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