2012-09-03 55 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