2012-09-03 54 views
1

代码:为什么用外部访问权限声明变量?

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

变量url申报with,但它可以用,为什么访问之外?

+2

与不是一个函数,所以它不会引入新的变量范围。它只是改变'this'指的是什么。 – ronalchn

回答

2

在JavaScript中,没有块级范围界定;只有功能级范围。以这两个例子:

if (true) { 
    var a = 5; 
} 

alert(a); // 5 

// ... 

function foo() { 
    var a = 5; 
} 

foo(); 

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

var url;由于悬挂于功能块的顶部。 JavaScript没有块级的范围设定,只有关闭级(功能)。

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