文章目錄
總結一下,哪邊可能會有常見的scope問題和closure用法。
###new class
這個類型就是,一般最最常使用,非使用不可的情況了。有在用什摸js的class模型的
人類,應該還蠻清楚的。
new class1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var _person = function(params) { var _name = params.name, _age = params.age; this.getName = function() { return _name; }; this.getAge = function() { return _age; }; return this; }; var Mary = new _person({ name: "Mary", age: 15 }); console.log("Mary " + Mary.getAge());
|
###event
event的情況,也還蠻常用到的啦~通常是要偷懶的時候,會把一些公用函式提出來,
然後,就可以方便拿來用,不用定義了。
event1 2 3 4 5 6 7
| var count = 0; $btn1.click(function() { console.log(++count); }); $btn2.click(function() { console.log(++count); });
|
###ajax
ajax,就更常見了咧~w 不用的話,有時候真的不知道該怎摸寫下去才是。關於更詳
細的callback相關的東西,打算在之後做個…詳解(?)。這邊就跳過好了~
ajax1 2 3 4 5 6 7
| var callback = function() { console.log("callback"); }; $.post(_url, params) .done(function() { callback(); });
|
###curry
curry的內容,之前就講過了啦~在這一篇的第1段code
它的精神其實就是說,我可以預先塞一些特定的資料進去。而其實…會使用closure
的情況,大概也就是那樣,我需要先設定好某些訊息。
curry1 2 3 4 5 6 7 8 9 10 11
| var _getFunc = function(a) { return function(b) { return a + b; }; }; var _add2 = _getFunc(2), _add10000 = getFunc(10000); console.log(_add2(5)); console.log(_add10000(5));
|
當然,curry也有他的算是…. 一般式啦~大概,有可能…是長下面這樣~(我有點忘了,
很久沒刻了..|||) 有興趣的,應該可以瞧瞧prototypejs
這個還蠻悠久的framwork,還蠻有趣的,印象中…有很多有趣的寫法。下面那段code,
有些寫法是從裡面學來的。
curry21 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var _curry = function(fn, _self, params) { var _slice = Array.prototype.slice, args = _slice.apply(arguments, [2]); return function() { return fn.apply(_self, args.concat(_slice.apply(arguments))); }; }; var fn = _curry(function(params, x) { return params.coef1 * x * x + params.coef2 * x + params.coef3; }, self, { coef1: 5, coef2: 3, coef3: -7 }); console.log(fn(10));
|
###總結
在正常的情況下,以我來說,應該就只有上面那幾種情況會用到喇~ @ 3@ (其他沒提到的,大概…
都被我規在上面類型的喇~沒有漏掉的話…)
所以,如果正常的使用,其實,頂多包個1層或2層,如果,尼沒事包超過3層,ㄜ…久了就哉系阿,
就像一般寫structure language,全域變數是不建議使用的一樣,『用的好,讓尼上天堂;用不好,
就下地獄吧尼』