有害であると考え声明で
7時52分時2006年4月11日Douglas Crockfordはによって午前|中開発 | 64コメント JavaScriptのwith文は、オブジェクトへの定期的なアクセスを書くための簡略表現を提供することを意図していた。 だから代わりに書いている
=真ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing; ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = TRUE;
次のように書くことができます
{(ooo.eee.oo.ah_ah.ting.tang.walla.walla)付き チーン= TRUE; ビッグバン= TRUE; }
それは多くの良く見えます。 一つのことを除いて。 あなたがコードを調べることで見分けることは不可能になることはありませんbingとbang modifedてしまいますが。 予定ooo.eee.oo.ah_ah.ting.tang.walla.walla変更することが? またはグローバル変数を予定bingとbangたたかれる? それは確実に知ることは不可能です。
with文は、現在のスコープへのオブジェクトのメンバを追加します。 ある場合に限り、 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; 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それ! | のreddit!
同期対非同期
11:55 2006年4月4日Douglas Crockfordはによって午前|中開発 | 26コメントXMLHttpRequestは同期または非同期で動作することができます。 多くの人が同期的に使用することを好む。 サーバとの相互作用が完了するまでは、この方法を使用すると、JavaScriptエンジンはブロックされます。 それをブロックするので、制御の流れは通常の関数呼び出しによく似ています。 時間的な複雑さは非常に精通し、快適なプログラミングパターンを残して、離れて抽象化されます。 サーバが同じマシン上、または近くのLAN上にある時には特に適しています。 残念ながら、それはサーバの負荷が大きい場合は非常にひどく実行することができます、またはブラウザが低速リンク経由でサーバーに接続されている場合。 要求が完了するまでJavaScriptエンジンがブロックされているので、ブラウザがフリーズされます。 ユーザーが要求を取り消すことができない、離れてクリックできない、別のタブに移動することはできません。 これは非常に悪い行動です。
幸いなことに、XMLHttpRequestは非同期操作用のオプションが用意されています。 あなたが設定するとasyncFlagにフラグをtrue 、JavaScriptエンジンはブロックされません。 代わりに、リクエストはご要望に応じて結果が知られている場合、後にトリガされる潜在的なアクションと、すぐに返します。 ヤフー 接続マネージャは、このために非常に便利なインターフェイスを提供します。
VAR cObj = YAHOO.util.Connect.asyncRequest('GET'、'http://myservice.com?req=update'、{ 成功:関数(応答){ アラート(response.responseText); }、 故障:機能(応答){ アラート(response.statusText); } });
次の2つの機能を提供。 あなたのsuccess関数は、後続の要求の結果として起こることがすべて含まれています。 要求がいくつか得ることがあったのであればJSONのに配信されるべきテキストapp.update方法を、あなたのsuccess機能である可能性があります
成功:関数(応答){ app.updateはeval(('('+ response.statusText + ')')); }
要求を行っているの結果ではなく、要求のステートメントを以下の関数にカプセル化されているため、非同期プログラミングは、少し複雑です。 しかし、彼らは低迷サーバまたは低迷ネットワーク、それがクラッシュしたかのようにブラウザが動作するように原因が表示されないため、ユーザーエクスペリエンスが大幅に改善できることをリアルタイム動作。 同期プログラミングは失礼ですし、人々によって使用される用途に使用されるべきではない。
共有および拡張: del.icio.usでブックマーク | Diggそれ! | のreddit!


