JS基礎--with

with通常被當做重複引用同一個對象中多個屬性的快捷方式,可以不需要重複對象本身。

eg:

function foo(obj){
with(obj)
 {a=2;}
}
var o1={a:3}
var o2={b:3}
foo(o1);
console.log(o1.a);

foo(o2);
console.log(o2.a);//undefined
console.log(a);//2 --a被泄露到全局作用域
在這個例子中,我們創建了2個對象o1,o2。o1具有a屬性,o2不具有a屬性。當我們執行foo(o1)時,將o1的引用傳遞給foo()函數,在with代碼塊內部,在執行a=2時,實際我們執行了一個LHS查詢,因爲o1具有a屬性,因此輸出爲2.同理,當foo(o2)執行時,因爲o2不具有該屬性,所以輸出undefined。

注意:

當我們在執行foo(o2)時,由於o2沒有a這個屬性,因此,在執行with語句塊時,a=2這個語句實際上創建了一個全局的a屬性。因爲with屬性可以將一個沒有或者多個屬性的對象處理爲一個完全隔離的詞法作用域,因此這個對象的屬性也會被處理爲定義在這個作用域中的詞法標識符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章