視為有害的聲明
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它! | 書籤交易!

