モジュールモードを深く理解する
15876 ワード
ここでは主に「JavaScript言語精粋」の中の関数に関する理解を引用して、「JavaScript高級プログラム設計-第2版」と結び付けてブロックレベルの作用領域に対する理解を結び付けて、自分のしたプロジェクトを連想して、モジュールモードをまとめて評価します.
1 /**
2 * ——
3 * 1>JavaScript , 。
4 * 2> , ( ), 。
5 * 3> , , , 。
6 * 3> :
7 * a> ( ): ,
8 * b> 。
9 * c>
10 * 4> ...
11 */
12 (function($){
13 /**
14 *
15 * 1>
16 * a>
17 * b> ( )
18 * c> 。
19 * d>
20 * 2>
21 * a>
22 * b> , , ,
23 * 3> : ,
24 */
25 //
26 //
27 dom.find('div.ldj-chat-in input, div.ldj-chat-input textarea').bind('keydown keyup change',function(dom){
28 // 3
29 var curr = 0;
30 /**
31 * history , , , history , , ,
32 * , history , , 。 , , ,
33 * 。 ," "。 ( ), 。
34 * 。 , history 。 。
35 * , , history ,
36 * , jQuery , history 。
37 * , curr now , 。( , , )。
38 */
39 var history;
40
41 var now;
42
43 /**
44 * ( ), 3 , 《JavaScript 》 , ,
45 * , , 。
46 */
47 return function(e){
48 /**
49 * 3 , , , , ,
50 * 。 text ,
51 * , 。
52 */
53 var l = $(this).data('len') || 0;
54 var text = $(this).val();
55 var n = text.length;
56 history = history || dom.data('history');
57
58 if ($.browser.opera || (e.type === 'keyup')) {
59 //
60 if (e.keyCode === 13) {
61 curr = 0;
62 // ,
63 if (text.trim() === '') {
64 $(this).val('').focus();
65 return;
66 }
67 $(this).trigger('send');
68 return false;
69 }
70 //
71 if (e.which === 38 && curr < history.length) {
72 now === undefined && (now = $(this).val());
73 var prev = history[curr];
74 if ($(this).is('textarea')) {
75 $(this).val(/^#c[0-9a-fA-F]{6}/.test(prev) ? prev.substring(8) : prev);
76 }
77 else {
78 $(this).val(prev);
79 }
80 $(this).data('len', prev.length);
81 curr++;
82 }
83 // ...
84 }
85 }
86 }(dom)); // , , 。 ,
87 // 。 , , , 。
88 /**
89 * ,history , 。 ,
90 * , ,
91 * , , , 。
92 * , JavaScript 。
93 */
94
95 (function(){
96 //
97 //...
98 })(); //
99
100 (function(){
101 //
102 //...
103 })();
104
105 /**
106 * JavaScript , ? 。
107 * , JavaScript 。
108 */
109
110 })(jQuery); // , , ; 。
111
112 /**
113 * 1. ,
114 * http://www.cnblogs.com/TomXu/archive/2011/12/30/2288372.html
115 * 2. , (function($){...})(jQuery), , ,
116 * , 。 , 。
117 */
注意してください.モジュールモードだけで私たちのJavaScriptコードを最適化しないでください.中にはクローズドがあるので、メモリの消耗はまだ大きいです.もちろん、私達は変相してここのクローズドバッグを見に行きたいです.もし変数があるなら、私達は継続的に検索が必要です.もちろんこのタイプの変数をメモリに入れて、検索速度を上げます.クローズドの存在を忘れないでください.この変数は静的な保存を実現します.(静的な記憶を実現するのは条件があります.ここではもう説明しません.)、いつこのような方式を適用する必要がありますか?性能だけでなく、機能の需要からも考慮しなければなりません.