JavaScript º¯Êýʽ±à³ÌÊÇÒ»¸ö´æÔÚÁ˺ܾõϰÌ⣬µ«Ëƺõ´Ó 2016
Ä꿪ʼ£¬Ëü±äµÃÔ½À´Ô½»ðÈÈ¡£Õâ¿ÉÄÜÊÇÒòΪ ES6 Óï·¨¶ÔÓÚº¯Êýʽ±à³Ì¸üΪÓѺã¬Ò²¿ÉÄÜÊÇÒòΪÖîÈç RxJS
(ReactiveX) µÈº¯Êýʽ¿ò¼ÜµÄÁ÷ÐС£
¿´¹ýÐí¶à¹ØÓÚº¯Êýʽ±à³ÌµÄ½²½â£¬µ«ÊÇÆäÖд󲿷ÖÊÇÍ£ÁôÔÚÀíÂÛ²ãÃæ£¬»¹ÓÐһЩÊǽöÕë¶Ô
Haskell µÈ´¿º¯Êýʽ±à³ÌÓïÑԵġ£¶ø±¾ÎÄÖ¼ÔÚÁÄÒ»ÁÄÎÒÑÛÖеĺ¯Êýʽ±à³ÌÔÚ JavaScript ÖеľßÌåʵ¼ù£¬Ö®ËùÒÔÊÇ
¡°ÎÒÑÛÖеġ± ¼´ÎÒËù˵µÄ½ö´ú±í¸öÈ˹۵㣬¿ÉÄܺͲ¿·Ö Ñϸñ¸ÅÄî ÊÇÓгåÍ»µÄ¡£
±¾ÎĽ«ÂÔÈ¥Ò»´ó¶ÑÐÎʽ»¯µÄ¸ÅÄî½éÉÜ£¬ÖصãչʾÔÚ JavaScript Öе½µ×ʲôÊǺ¯ÊýʽµÄ´úÂë¡¢º¯Êýʽ´úÂëÓëÒ»°ãд·¨ÓÐÊ²Ã´Çø±ð¡¢º¯ÊýʽµÄ´úÂëÄܸøÎÒÃÇ´øÀ´Ê²Ã´ºÃ´¦ÒÔ¼°³£¼ûµÄһЩº¯ÊýʽģÐͶ¼ÓÐÄÄЩ¡£

ÎÒÀí½âµÄº¯Êýʽ±à³Ì
ÎÒÈÏΪº¯Êýʽ±à³Ì¿ÉÒÔÀí½âΪ£¬ÒÔº¯Êý×÷ΪÖ÷ÒªÔØÌåµÄ±à³Ì·½Ê½£¬Óú¯ÊýÈ¥²ð½â¡¢³éÏóÒ»°ãµÄ±í´ïʽ
ÓëÃüÁîʽÏà±È£¬ÕâÑù×öµÄºÃ´¦ÔÚÄÄ£¿Ö÷ÒªÓÐÒÔϼ¸µã£º
ÓïÒå¸ü¼ÓÇåÎú
¿É¸´ÓÃÐÔ¸ü¸ß
¿Éά»¤ÐÔ¸üºÃ
×÷ÓÃÓò¾ÖÏÞ£¬¸±×÷ÓÃÉÙ
»ù±¾µÄº¯Êýʽ±à³Ì
ÏÂÃæÀý×ÓÊÇÒ»¸ö¾ßÌåµÄº¯ÊýʽÌåÏÖ
// Êý×éÖÐÿ¸öµ¥´Ê£¬Ê××Öĸ´óд
// Ò»°ãд·¨
const arr = ['apple', 'pen', 'apple-pen'];
for(const i in arr){
const c = arr[i][0];
arr[i] = c.toUpperCase() + arr[i].slice(1);
}
console.log(arr);
// º¯Êýʽд·¨Ò»
function upperFirst(word) {
return word[0].toUpperCase() + word.slice(1);
}
function wordToUpperCase(arr) {
return arr.map(upperFirst);
}
console.log(wordToUpperCase(['apple', 'pen',
'apple-pen']));
// º¯Êýʽд·¨¶þ
console.log(arr.map(['apple', 'pen', 'apple-pen'],
word => word[0].toUpperCase() + word.slice(1))); |
µ±Çé¿ö±äµÃ¸ü¼Ó¸´ÔÓʱ£¬±í´ïʽµÄд·¨»áÓöµ½¼¸¸öÎÊÌ⣺
±íÒâ²»Ã÷ÏÔ£¬Öð½¥±äµÃÄÑÒÔά»¤
¸´ÓÃÐԲ»á²úÉú¸ü¶àµÄ´úÂëÁ¿
»á²úÉúºÜ¶àÖмä±äÁ¿
º¯Êýʽ±à³ÌºÜºÃµÄ½â¾öÁËÉÏÊöÎÊÌâ¡£Ê×ÏȲο´ º¯Êýʽд·¨Ò»£¬ËüÀûÓÃÁ˺¯Êý·â×°ÐÔ½«¹¦ÄÜ×ö²ð½â£¨Á£¶È²»Î¨Ò»£©£¬²¢·âװΪ²»Í¬µÄº¯Êý£¬¶øÔÙÀûÓÃ×éºÏµÄµ÷ÓôﵽĿµÄ¡£ÕâÑù×öʹµÃ±íÒâÇåÎú£¬Ò×ÓÚά»¤¡¢¸´ÓÃÒÔ¼°À©Õ¹¡£Æä´ÎÀûÓÃ
¸ß½×º¯Êý£¬Array.map ´úÌæ for¡of ×öÊý×é±éÀú£¬¼õÉÙÁËÖмä±äÁ¿ºÍ²Ù×÷¡£
¶ø º¯Êýʽд·¨Ò» ºÍ º¯Êýʽд·¨¶þ Ö®¼äµÄÖ÷Òª²î±ðÔÚÓÚ£¬¿ÉÒÔ¿¼ÂǺ¯ÊýÊÇ·ñºóÐøÓи´ÓõĿÉÄÜ£¬Èç¹ûûÓУ¬ÔòºóÕ߸üÓÅ¡£
Á´Ê½ÓÅ»¯
´ÓÉÏÃæ º¯Êýʽд·¨¶þ ÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬º¯Êýʽ´úÂëÔÚдµÄ¹ý³ÌÖУ¬ºÜÈÝÒ×Ôì³É ºáÏòÑÓÕ¹£¬¼´²úÉú¶à²ãǶÌ×£¬ÏÂÃæÎÒÃǾٸö±È½Ï¼«¶ËµãµÄÀý×Ó¡£
// ¼ÆËãÊý×ÖÖ®ºÍ
// Ò»°ãд·¨
console.log(1 + 2 + 3 - 4)
// º¯Êýʽд·¨
function sum(a, b) {
return a + b;
}
function sub(a, b) {
return a - b;
}
console.log(sub(sum(sum(1, 2), 3), 4); |
±¾Àý½öΪչʾ ºáÏòÑÓÕ¹ µÄ±È½Ï¼«¶ËµÄÇé¿ö£¬Ëæ×ź¯ÊýµÄǶÌײãÊý²»¶ÏÔö¶à£¬µ¼Ö´úÂëµÄ¿É¶ÁÐÔ´ó·ùϽµ£¬»¹ºÜÈÝÒײúÉú´íÎó¡£
ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂǶàÖÖÓÅ»¯·½Ê½£¬±ÈÈçÏÂÃæµÄ Á´Ê½ÓÅ»¯ ¡£
// ÓÅ»¯Ð´·¨ (àÅ£¬Äãû¿´´í£¬Õâ¾ÍÊÇ lodash µÄÁ´Ê½Ð´·¨) const utils = { chain(a) { this._temp = a; return this; }, sum(b) { this._temp += b; return this; }, sub(b) { this._temp -= b; return this; }, value() { const _temp = this._temp; this._temp = undefined; return _temp; } };
console.log(utils.chain(1).sum(2).sum(3).sub(4).value()); |
ÕâÑù¸Äдºó£¬½á¹¹»áÕûÌå±äµÃ±È½ÏÇåÎú£¬¶øÇÒÁ´µÄÿһ»·ÔÚ×öʲôҲ¿ÉÒÔºÜÈÝÒ×µÄÕ¹ÏÖ³öÀ´¡£º¯ÊýµÄǶÌ׺ÍÁ´Ê½µÄ¶Ô±È»¹ÓÐÒ»¸öºÜºÃµÄÀý×Ó£¬ÄǾÍÊÇ
»Øµ÷º¯Êý ºÍ Promise ģʽ¡£
// ˳ÐòÇëÇóÁ½¸ö½Ó¿Ú
// »Øµ÷º¯Êý
import $ from 'jquery';
$.post('a/url/to/target', (rs) => {
if(rs){
$.post('a/url/to/another/target', (rs2) =>
{
if(rs2){
$.post('a/url/to/third/target');
}
});
}
});
// Promise
import request from 'catta'; // catta ÊÇÒ»¸öÇáÁ¿¼¶ÇëÇ󹤾ߣ¬Ö§³Ö
fetch,jsonp,ajax£¬ÎÞÒÀÀµ
request('a/url/to/target')
.then(rs => rs ? $.post('a/url/to/another/target')
: Promise.reject())
.then(rs2 => rs2 ? $.post('a/url/to/third/target')
: Promise.reject()); |
Ëæ×Żص÷º¯ÊýǶÌײ㼶ºÍµ¥²ã¸´ÔÓ¶ÈÔö¼Ó£¬Ëü½«»á±äµÃÓ·Ö×ÇÒÄÑÒÔά»¤£¬¶ø Promise µÄÁ´Ê½½á¹¹£¬Ôڸ߸´ÔÓ¶Èʱ£¬ÈÔÄÜ×ÝÏòÀ©Õ¹£¬¶øÇÒ²ã´Î¸ôÀëºÜÇåÎú¡£
³£¼ûµÄº¯Êýʽ±à³ÌÄ£ÐÍ
±Õ°ü£¨Closure£©
¿ÉÒÔ±£Áô¾Ö²¿±äÁ¿²»±»ÊͷŵĴúÂë¿é£¬±»³ÆÎªÒ»¸ö±Õ°ü
±Õ°üµÄ¸ÅÄî±È½Ï³éÏó£¬ÏàÐÅ´ó¼Ò¶¼»ò¶à»òÉÙÖªµÀ¡¢Óõ½Õâ¸öÌØÐÔ
ÄÇô±Õ°üµ½µ×ÄܸøÎÒÃÇ´øÀ´Ê²Ã´ºÃ´¦£¿
ÏÈÀ´¿´Ò»ÏÂÈçºÎ´´½¨Ò»¸ö±Õ°ü£º
// ´´½¨Ò»¸ö±Õ°ü function makeCounter() { let k = 0;
return function() {
return ++k;
};
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2 |
makeCounter Õâ¸öº¯ÊýµÄ´úÂë¿é£¬ÔÚ·µ»ØµÄº¯ÊýÖУ¬¶Ô¾Ö²¿±äÁ¿ k £¬½øÐÐÁËÒýÓ㬵¼Ö¾ֲ¿±äÁ¿ÎÞ·¨ÔÚº¯ÊýÖ´ÐнáÊøºó£¬±»ÏµÍ³»ØÊÕµô£¬´Ó¶ø²úÉúÁ˱հü¡£¶øÕâ¸ö±Õ°üµÄ×÷ÓþÍÊÇ£¬¡°±£Áôס¡°
Á˾ֲ¿±äÁ¿£¬Ê¹Äڲ㺯Êýµ÷ÓÃʱ£¬¿ÉÒÔÖØ¸´Ê¹ÓøñäÁ¿£»¶ø²»Í¬ÓÚÈ«¾Ö±äÁ¿£¬¸Ã±äÁ¿Ö»ÄÜÔÚº¯ÊýÄÚ²¿±»ÒýÓá£
»»¾ä»°Ëµ£¬±Õ°üÆäʵ¾ÍÊÇ´´Ôì³öÁËһЩº¯Êý˽ÓÐµÄ ¡±³Ö¾Ã»¯±äÁ¿¡°¡£
ËùÒÔ´ÓÕâ¸öÀý×Ó£¬ÎÒÃÇ¿ÉÒÔ×ܽá³ö£¬±Õ°üµÄ´´ÔìÌõ¼þÊÇ£º
´æÔÚÄÚ¡¢ÍâÁ½²ãº¯Êý
Äڲ㺯Êý¶ÔÍâ²ãº¯ÊýµÄ¾Ö²¿±äÁ¿½øÐÐÁËÒýÓÃ
±Õ°üµÄÓÃ;
±Õ°üµÄÖ÷ÒªÓÃ;¾ÍÊÇ¿ÉÒÔ¶¨ÒåһЩ×÷ÓÃÓò¾ÖÏ޵ij־û¯±äÁ¿£¬ÕâЩ±äÁ¿¿ÉÒÔÓÃÀ´×ö»º´æ»òÕß¼ÆËãµÄÖмäÁ¿µÈµÈ¡£
// ¼òµ¥µÄ»º´æ¹¤¾ß // ÄäÃûº¯Êý´´ÔìÁËÒ»¸ö±Õ°ü const cache = (function() { const store = {};
return {
get(key) {
return store[key];
},
set(key, val) {
store[key] = val;
}
}
}());
cache.set('a', 1);
cache.get('a'); // 1 |
ÉÏÃæÀý×ÓÊÇÒ»¸ö¼òµ¥µÄ»º´æ¹¤¾ßµÄʵÏÖ£¬ÄäÃûº¯Êý´´ÔìÁËÒ»¸ö±Õ°ü£¬Ê¹µÃ store ¶ÔÏó £¬Ò»Ö±¿ÉÒÔ±»ÒýÓ㬲»»á±»»ØÊÕ¡£
±Õ°üµÄ±×¶Ë
³Ö¾Ã»¯±äÁ¿²»»á±»Õý³£ÊÍ·Å£¬³ÖÐøÕ¼ÓÃÄÚ´æ¿Õ¼ä£¬ºÜÈÝÒ×Ôì³ÉÄÚ´æÀË·Ñ£¬ËùÒÔÒ»°ãÐèҪһЩ¶îÍâÊÖ¶¯µÄÇåÀí»úÖÆ¡£
¸ß½×º¯Êý
½ÓÊÜ»òÕß·µ»ØÒ»¸öº¯ÊýµÄº¯Êý³ÆÎª¸ß½×º¯Êý
ÌýÉÏÈ¥ºÜ¸ßÀäµÄÒ»¸ö´Ê»ã£¬µ«ÊÇÆäʵÎÒÃǾ³£Óõ½£¬Ö»ÊÇÔÀ´²»ÖªµÀËûÃǵÄÃû×Ö¶øÒÑ¡£JavaScript ÓïÑÔÊÇÔÉúÖ§³Ö¸ß½×º¯ÊýµÄ£¬ÒòΪ
JavaScript µÄº¯ÊýÊÇÒ»µÈ¹«Ãñ£¬Ëü¼È¿ÉÒÔ×÷Ϊ²ÎÊýÓÖ¿ÉÒÔ×÷ΪÁíÒ»¸öº¯ÊýµÄ·µ»ØÖµÊ¹Óá£
ÎÒÃǾ³£¿ÉÒÔÔÚ JavaScript Öмûµ½Ðí¶àÔÉúµÄ¸ß½×º¯Êý£¬ÀýÈç Array.map , Array.reduce
, Array.filter
ÏÂÃæÒÔ map ΪÀý£¬ÎÒÃÇ¿´¿´ËûÊÇÈçºÎʹÓõÄ
map £¨Ó³É䣩
Ó³ÉäÊǶԼ¯ºÏ¶øÑԵ쬼´°Ñ¼¯ºÏµÄÿһÏî¶¼×öÏàͬµÄ±ä»»£¬²úÉúÒ»¸öÐµļ¯ºÏ
map ×÷Ϊһ¸ö¸ß½×º¯Êý£¬Ëû½ÓÊÜÒ»¸öº¯Êý²ÎÊý×÷ΪӳÉäµÄÂß¼
// Êý×éÖÐÿһÏî¼ÓÒ»£¬×é³ÉÒ»¸öÐÂÊý×é
// Ò»°ãд·¨
const arr = [1,2,3];
const rs = [];
for(const n of arr){
rs.push(++n);
}
console.log(rs)
// map¸Äд
const arr = [1,2,3];
const rs = arr.map(n => ++n); |
ÉÏÃæÒ»°ãд·¨£¬ÀûÓà for...of Ñ»·µÄ·½Ê½±éÀúÊý×é»á²úÉú¶îÍâµÄ²Ù×÷£¬¶øÇÒÓиıäÔÊý×éµÄ·çÏÕ
¶ø map º¯Êý·â×°Á˱ØÒªµÄ²Ù×÷£¬Ê¹ÎÒÃǽöÐèÒª¹ØÐÄÓ³ÉäÂß¼µÄº¯ÊýʵÏÖ¼´¿É£¬¼õÉÙÁË´úÂëÁ¿£¬Ò²½µµÍÁ˸±×÷ÓòúÉúµÄ·çÏÕ¡£
¿ÂÀﻯ£¨Currying£©
¸ø¶¨Ò»¸öº¯ÊýµÄ²¿·Ö²ÎÊý£¬Éú³ÉÒ»¸ö½ÓÊÜÆäËû²ÎÊýµÄк¯Êý
¿ÉÄܲ»³£Ìýµ½Õâ¸öÃû´Ê£¬µ«ÊÇÓùý undescore »ò lodash µÄÈ˶¼¼û¹ýËû¡£
ÓÐÒ»¸öÉñÆæµÄ _.partial º¯Êý£¬Ëü¾ÍÊÇ¿ÂÀﻯµÄʵÏÖ
// »ñȡĿ±êÎļþ¶Ô»ù´¡Â·¾¶µÄÏà¶Ô·¾¶
// Ò»°ãд·¨
const BASE = '/path/to/base';
const relativePath = path.relative(BASE, '/some/path');
// _.parical ¸Äд
const BASE = '/path/to/base';
const relativeFromBase = _.partial(path.relative,
BASE);
const relativePath = relativeFromBase('/some/path'); |
ͨ¹ý _.partial £¬ÎÒÃǵõ½ÁËеĺ¯Êý relativeFromBase £¬Õâ¸öº¯ÊýÔÚµ÷ÓÃʱ¾ÍÏ൱ÓÚµ÷ÓÃ
path.relative £¬²¢Ä¬ÈϽ«µÚÒ»¸ö²ÎÊý´«Èë BASE £¬ºóÐø´«ÈëµÄ²ÎÊý˳ÐòºóÖá£
±¾ÀýÖУ¬ÎÒÃÇÕæÕýÏëÍê³ÉµÄ²Ù×÷ÊÇÿ´Î»ñµÃÏà¶ÔÓÚ BASE µÄ·¾¶£¬¶ø·ÇÏà¶ÔÓÚÈκη¾¶¡£¿ÂÀﻯ¿ÉÒÔʹÎÒÃÇÖ»¹ØÐĺ¯ÊýµÄ²¿·Ö²ÎÊý£¬Ê¹º¯ÊýµÄÓÃ;¸ü¼ÓÇåÎú£¬µ÷Óøü¼Ó¼òµ¥¡£
×éºÏ£¨Composing£©
½«¶à¸öº¯ÊýµÄÄÜÁ¦ºÏ²¢£¬´´ÔìÒ»¸öеĺ¯Êý
ͬÑùÄãµÚÒ»´Î¼ûµ½Ëû¿ÉÄÜ»¹ÊÇÔÚ lodash ÖУ¬compose ·½·¨£¨ÏÖÔڽРflow£©
// Êý×éÖÐÿ¸öµ¥´Ê´óд£¬×ö Base64
// Ò»°ãд·¨ (ÆäÖÐÒ»ÖÖ)
const arr = ['pen', 'apple', 'applypen'];
const rs = [];
for(const w of arr){
rs.push(btoa(w.toUpperCase()));
}
console.log(rs);
// _.flow ¸Äд
const arr = ['pen', 'apple', 'applypen'];
const upperAndBase64 = _.partialRight(_.map, _.flow(_.upperCase,
btoa));
console.log(upperAndBase64(arr)); |
_.flow ½«×ª´óдºÍת Base64 µÄº¯ÊýµÄÄÜÁ¦ºÏ²¢£¬Éú³ÉÒ»¸öеĺ¯Êý¡£·½±ã×÷Ϊ²ÎÊýº¯Êý»òºóÐø¸´Óá£
×Ô¼ºµÄ¹Ûµã
ÎÒÀí½âµÄ JavaScript º¯Êýʽ±à³Ì£¬¿ÉÄܺÍÐí¶à´«Í³¸ÅÄͬ¡£ÎÒ²¢²»Ö»ÈÏΪ ¸ß½×º¯Êý Ë㺯Êýʽ±à³Ì£¬ÆäËûµÄÖîÈçÆÕͨº¯Êý½áºÏµ÷Óá¢Á´Ê½½á¹¹µÈ£¬ÎÒ¶¼ÈÏΪÊôÓÚº¯Êýʽ±à³ÌµÄ·¶³ë£¬Ö»ÒªËûÃÇÊÇÒÔº¯Êý×÷ΪÖ÷ÒªÔØÌåµÄ¡£
¶øÎÒÈÏΪº¯Êýʽ±à³Ì²¢²»ÊDZØÐëµÄ£¬ËüÒ²²»Ó¦¸ÃÊÇÒ»¸öÇ¿ÖÆµÄ¹æ¶¨»òÒªÇó¡£ÓëÃæÏò¶ÔÏó»òÆäËû˼ÏëÒ»Ñù£¬ËüÒ²ÊÇÆäÖÐÒ»ÖÖ·½Ê½¡£ÎÒÃǸü¶àÇé¿öÏ£¬Ó¦¸ÃÊǼ¸ÕߵĽáºÏ£¬¶ø²»ÊǾÖÏÞÓÚ¸ÅÄî¡£
|