当前位置: 首页 > news >正文

领券购买网站是怎么做的/百度推广官方

领券购买网站是怎么做的,百度推广官方,wordpress限制1m,上海门户网站制一个函数 如果输入参数包含函数 或 返回值是函数,就称为高阶函数。 这篇文章介绍高阶函数的一个子集:输入 fn,输出 fn。 按fn与fn功能是否一致【即相同输入是否始终对应相同输出】,把这类高阶函数的作用分为两类: 包装…

一个函数 如果输入参数包含函数 或 返回值是函数,就称为高阶函数。

这篇文章介绍高阶函数的一个子集:输入 fn,输出 fn'
fnfn'功能是否一致【即相同输入是否始终对应相同输出】,把这类高阶函数的作用分为两类:

  1. 包装函数:功能一致
  2. 修改函数:功能不一致

包装函数

从斐波那契数列开始。

const fib = n => (n <= 1 ? 1 : fib(n - 1) + fib(n - 2));fib(42);

记录执行时间

  • 普通青年

    const fib = n => (n <= 1 ? 1 : fib(n - 1) + fib(n - 2));console.time("fib");
    fib(42);
    console.timeEnd("fib");
  • 函数式青年

    const timed = fn => (...args) => {console.time(fn.name);const result = fn(...args);console.timeEnd(fn.name);return result;
    };
    const fib = n => (n <= 1 ? 1 : fib(n - 1) + fib(n - 2));timed(fib)(42);

优化性能

  • 普通青年

    const memory = {};
    const fib = n => {if (n <= 1) return 1;else {if (memory[n]) return memory[n];else {memory[n] = fib(n - 1) + fib(n - 2);return memory[n];}}
    };
    const timed = fn => (...args) => {console.time(fn.name);const result = fn(...args);console.timeEnd(fn.name);return result;
    };
    timed(fib)(42);
  • 函数式青年

    const memorize = fn => {const memory = {};return arg => {if (memory[arg]) return memory[arg];else {memory[arg] = fn(arg);return memory[arg];}};
    };
    const fib = memorize(n => (n <= 1 ? 1 : fib(n - 1) + fib(n - 2)));
    const timed = fn => (...args) => {console.time(fn.name);const result = fn(...args);console.timeEnd(fn.name);return result;
    };
    timed(fib)(42);

修改函数

once

场景:
发送请求,如果后台返回 session 超时,弹出重新登录提示框。
发出多个请求,后台都返回 session 超时错误,只希望弹一个重新登录提示框。

const once = fn => {let executed = false;return (...args) => {if (!executed) {executed = true;fn(...args);}};
};
const showLogoutWin = once(() => {// ...
});

debounce

场景:
输入框 change 事件触发向后台查询
为消除不必要的查询
用户连续输入时不触发查询,当 200ms 内没有新的输入时,才向后台查询

const debounce = (fn, ms = 200) => {let timeoutId;return (...args) => {clearTimeout(timeoutId);timeoutId = setTimeout(() => fn(...args), ms);};
};

更多实际场景

validateRequired

场景:
根据 rule.required 判断空值时是否报错,这段逻辑出现在多个 validator 中。

const ipv4Validator = (rule, value, callback) => {if (value) {if (ipv4RegExp.test(value)) {callback();} else {callback("请输入合法IP");}} else {if (rule.required) {callback("该域为必填项");} else {callback();}}
};

把判空的逻辑提取到高阶函数中

const validateRequired = (validator, msg = "该域为必填项") => (rule,value,callback
) => {if (value) {validator(rule, value, callback);} else {if (rule.required) {callback(msg);} else {callback();}}
};const ipv4Validator = validateRequired((rule, value, callback) => {if (ipV4Regexp.test(value)) {callback();} else {callback("请输入合法IP");}
});

tryUntilSucceeded

场景:
因为网络不稳定,请求可能出错,出错后重新请求,直到得到响应为止。

let res;
while (true) {try {res = await get(path);break;} catch (err) {console.log(err);}
}

把出错重试的逻辑提取到高阶函数中

const tryUntilSucceeded = fn => async (...args) => {while (true) {try {return await fn(...args);} catch (err) {console.log(err);}}
};const enhancedGet = tryUntilSucceeded(get);
const enhancedPost = tryUntilSucceeded(post);const resGet = await enhancedGet(path);
const resPost = await enhancedPost(path);

小结

两个代码块一样,把这个代码块提取出来,封成一个函数,减少代码重复,这个技巧大家都知道;

两段代码流程一样,用高阶函数把公共的流程提取出来,减少代码重复,这个技巧知道的人就不多了。可以类比react的高阶组件,道理是一样的。

转载于:https://www.cnblogs.com/apolis/p/11079084.html

http://www.jmfq.cn/news/5264191.html

相关文章:

  • 海淀网站制作/网络推广运营优化
  • 黑龙江省中国建设银行网站首页/网站运营方案
  • 房产网站的建设/网络营销的方式有几种
  • 视频网站模板源码/网站推广方案策划书2000
  • 郑州最好的网站建设/seo北京公司
  • 网站建设中模板/连云港seo优化
  • 商城网站建设腾讯体育/女教师网课入侵录屏
  • 百度云网站建设/百度产品
  • 抚州网站开发机构/百度网盘官网网页版
  • b2c十大平台排名/关闭站长工具seo综合查询
  • 莆田 做网站的公司/企业qq官网
  • 做暧暖爱视频网站/招代理最好的推广方式
  • 做网站怎么租个空间/苏州优化seo
  • 阿里巴巴logo发展史/长沙谷歌优化
  • wordpress 帮助文档/seo关键词排名如何
  • 别人做的网站会植入病毒吗/巨量关键词搜索查询
  • 南昌做网站的公司/seo咨询师招聘
  • 荆州做网站公司/网络营销的内容
  • 作风建设年网站/南宁优化推广服务
  • wiki能用wordpress/西安seo优化培训机构
  • 合肥市城乡建设委员会网站/青岛网站建设公司
  • 全面的手机网站建设/上海网站建设咨询
  • 全屏背景网站如何做到自适应/平台外宣推广技巧
  • 两栏式网站/在线crm网站
  • 华为云云速建站怎样/冯耀宗seo教程
  • 网站开发使用框架原因/西安seo外包行者seo06
  • 微信网站开发视频教程/找回原来的百度
  • 开发网站开奖类游戏需要什么技术/谷歌外贸
  • 软文推广是什么意思?/西安seo诊断
  • 做网站用c语言吗/企业网站营销的典型案例