首頁  >  文章  >  web前端  >  JavaScript中with語句作用與副作用實例詳解

JavaScript中with語句作用與副作用實例詳解

伊谢尔伦
伊谢尔伦原創
2017-07-25 14:05:511535瀏覽

定義with語句的目的主要是為了簡化多次編寫相同物件的工作

with語句將object加入到作用域鏈的頭部,然後執行statement,最後把作用域鏈恢復到原始狀態

with(object){
  statement;
}

作用

#  在物件嵌套層次很深的時候通常會使用with語句來簡化程式碼編寫。而本質上是透過將一個物件的引用當作作用域來處理,將物件的屬性當作作用域中的識別符來處理,從而創建了一個新的詞法作用域

#在客戶端javascript中,可能會使用類似下面這種表達式來存取一個HTML表單中的元素

document.forms[0].address.value

  如果這種表達式在程式碼中多次出現,則可以使用with語句將form對象加到作用域鏈的頂層

with(document.forms[0]){
name.value = '';
address.value = '';
emai.value = '';
}

  這種方法減少了大量的輸入,不用再為每個屬性名稱添加document.forms[0]前綴。這個物件暫時掛載在作用域鏈上,當javascript需要解析諸如address的標識符時,就會自動在這個物件中尋找

  [注意]with語句提供了一種讀取物件的屬性的捷徑,但它並不能建立物件的屬性

  如果物件o有一個屬性x,那麼下面程式碼給這個屬性賦值為1

var o = {x:0};
with(o) x = 1;
console.log(o.x);//1

  如果o中沒有定義屬性x,下面程式碼和不使用with語句的程式碼x=1是一模一樣的。這是因為對變數x進行了LHS查詢,並將1賦值給它

var o = {};
with(o) x = 1;
console.log(o.x);//undefined
console.log(x);//1

副作用

  與eval類似,with語句的javascript程式碼非常難於最佳化,同時也會造成偵錯程式碼困難,且同沒有使用with語句的程式碼相比,它運算得更慢

  而且,如果with語句不當,還有可能造成變數洩漏,污染全局作用域的情況

var x = 1;
var o = {};
with(o){
x = 2;
}
console.log(x);//2
console.log(o.x);//undefined

嚴格模式

  嚴格模式下,禁止使用with語句

//SyntaxError: Strict mode code may not include a with statement
'use strict';
var o = {};
with(o){
x = 2;
}

以上是JavaScript中with語句作用與副作用實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn