視為有害的聲明

2006年4月11日上午7:52時由Douglas Crockford |在發展中| 64評論

JavaScript的with語句的目的是提供一個經常訪問的對象編寫的簡寫。 因此,而不是寫

  ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = TRUE;
 ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = TRUE; 

你可以寫

  (ooo.eee.oo.ah_ah.ting.tang.walla.walla)
    冰= TRUE;
    轟隆 = TRUE;
 } 

這看起來要好很多。 除了一件事。 有沒有辦法,你可以告訴在哪個代碼bing bang Bang將得到更新日期。 ooo.eee.oo.ah_ah.ting.tang.walla.walla修改? 全局變量或將bing bang Bang打一頓? 肯定知道這是不可能的的。

with語句將對象的成員,目前的範圍。 僅當有bing Bing在ooo.eee.oo.ah_ah.ting.tang.walla.walla ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing訪問。

如果你不能讀程序,並有信心,你知道它是什麼做,你可以沒有信心,這是正常工作。 出於這個原因,應避免with語句。

幸運的是,JavaScript也提供了一個更好的選擇。 我們可以簡單地定義一個var

  VAR O = ooo.eee.oo.ah_ah.ting.tang.walla.walla;
 o.bing = TRUE;
 o.bang = TRUE;

現在有沒有歧義。 我們可以有信心,這是ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang正在建立,而不是一些倒霉的變量。

分享和擴展: 書籤del.icio.us | Digg它! | 書籤交易!

同步訴異步

2006年4月4日,11:55上午由Douglas Crockford |在發展中| 26評論

XMLHttpRequest的可以同步或異步操作。 許多人喜歡用它同步。 採用這種方式時,JavaScript引擎被阻塞,直到完成與服務器的交互。 因為它阻止,控制流很多看起來像一個普通的函數調用。 時間複雜度是抽象化了,留下一個非常熟悉和舒適的的編程模式。 特別是當服務器是同一台機器上,或附近的局域網上。 不幸的是,它可以執行非常嚴重,如果服務器在重負荷下,如果瀏覽器是連接到服務器通過慢速鏈接。 由於 JavaScript引擎被阻塞,直到請求完成,瀏覽器將被凍結。 用戶無法取消該請求,無法點擊了,不能去另一個標籤。 這是極其惡劣的行為。

幸運的是,XMLHttpRequest提供了一個異步操作的選項。 asyncFlag標誌設置true true ,當你的JavaScript引擎不會阻止。 相反,請求立即返回,並與潛在的行動將觸發後,當請求的結果是已知的。 雅虎 連接管理器為此提供了一個非常漂亮的界面。

  cObj = YAHOO.util.Connect.asyncRequest(“GET”,“http://myservice.com?req=update',{
    成功:函數(響應){
        警報(response.responseText);
     },
    失敗:函數(響應){
        警報(response.statusText);
     }
 }); 

您提供兩種功能。 success成功函數包含作為一個成功的請求的結果應該發生的一切。 因此,如果請求獲得一些JSON文本應交付的app.update方法,那麼你success的功能可以

 成功:函數(響應){
         app.update(EVAL(“(”+ response.statusText + ')'));
     } 

異步編程是稍微複雜些,因為請求的後果,而不是下面的請求語句的功能封裝。 但實時的行為,用戶體驗可以顯著改善,因為他們不會看到不景氣的服務器或網絡不暢導致瀏覽器的行為,雖然它已墜毀。 同步編程是不敬的,不應該在受僱於這是人們所使用的應用程序。

分享和擴展: 書籤del.icio.us | Digg它! | 書籤交易!

主辦雅虎

版權所有© 2006-2012雅虎公司保留所有權利。 隱私政策 - 服務條款

支持WordPress的關於雅虎 虛擬主機