为什么在中声明具有外部访问权限的变量
Why declare variables in with outside access to?
代码为:
with(location)
{
var url=href+"aaa";
}
alert(url);
变量url
在with
中声明,但它可以使用外部访问,为什么?
因为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
相关文章:
- 访问布局信息是否也会导致浏览器重排
- Javascript,访问一个主要对象模块模式中的每个对象
- 如何访问声音管理器2创建的声音对象
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何访问fastOpt.js
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- 难以访问的JS环境中的语法错误
- 如何从对象的原型方法访问JavaScript对象属性
- 访问json数组中的对象
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- CanvasJS-访问变量-访问属性toString的权限被拒绝
- 如何使用http(不安全访问)访问chrome最新版本中的相机功能
- 你有权访问iframe加载外部网站的内容吗
- 流星与流量路由器:我有权访问流星.用户从流量路由器触发
- 在实例方法中获取对实例属性的访问权
- 获得对本地计算机信息的访问权