🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

JavaScript - 迭代执行 `n` 次

2020-03-13 描述将一个回调函数迭代执行 n 次。提示使用 Function.call()调用 fn 函数 n 次或当他返回 false 最后一个参数 context,默认使用 undefined 对象或非严格模式下的全局对象代码 consttimes=(n,fn,context=undefined)=>{leti=0;while(fn.call(context,i)!==false&&++i<n){}};示例输出字符

JavaScript - 函数在一定时间内只能执行一次

2020-03-12 描述创建一个受限制的函数,每 wait 毫秒最多只能调用提供的函数一次。提示使用 setTimeout()和 clearTimeout()来限制给定的方法 fn 使用 Function.prototype.apply()将 this 上下文应用到受限函数中,并提供其必要的 arguments 使用 Date.now()跟踪上一次调用受限函数的时间第二个参数 wait 用于设置受限函数每次执行的时间间隔,默认

JavaScript - 省略后半部分参数的传入

2020-03-11 描述创建一个函数,当调用 fn 时,将 partials 添加到最终执行函数所接受的参数之后。提示使用扩展运算符...将 partials 添加到 fn 的参数列表之后代码 constpartialRight=(fn,...partials)=>(...args)=>fn(...args,...partials);示例对同一个朋友进行不同的问候:constgreet=(greeting,name)

JavaScript - 省略前半部分参数的传入

2020-03-10 描述创建一个函数,当调用 fn 时,将 partials 添加到最终执行函数所接受的参数之前。提示使用扩展运算符...将 partials 添加到 fn 参数列表之前代码 constpartial=(fn,...partials)=>(...args)=>fn(...partials,...args);示例对不同的朋友都说 Hello:constgreet=(greeting,name)=>gree

使用浏览器原生 API 读写本地文件

2020-03-09 简介新的文件系统 API 允许 Web 应用读取或修改用户设备中的文件或文件夹。他能让开发者简单的构建一个和用户本地文件交互的强大的 Web 应用,如 IDE,照片和视频编辑,文本编辑等。当用户授权给一个 Web 应用后,这个 API 就允许该 Web 应用读取或者修改用户设备上的文件。该 API 不属于 W3C 官方或 WHATWG 规范,目前状态如下:SpecificationStatusCommentFilea

JavaScript - 仅触发一次事件

2020-03-06 描述确保一个函数只被调用一次。提示在闭包中使用一个标志变量 called,当函数经过第一次调用后就将其设置为 true,从而阻止该函数被再次调用为了让函数能够修改自己的 this 上下文(如在一个事件监听器中),不仅需要使用 funciton 关键字,还需要让函数拥有自己的上下文环境使用扩展运算符...让函数可以接受任意多个参数代码 constonce=fn=>{letcalled=false

JavaScript - 返回一个条件函数的相反值

2020-03-05 描述返回一个条件函数的相反值。提示对条件函数使用非操作运算符!通过闭包将参数传入条件函数中代码 constnegate=func=>(...args)=>!func(...args);示例获取奇数:[1,2,3,4,5,6].filter(negate(n=>n%2===0));//[1,3,5]返回总目录每天 30 秒系列之 JavaScript 代码

如何在 JavaScript 中实现单例?

2020-03-04 回答较为高级灵活的方式是使用 Proxy,以下是将一个 class 转换为一个单例的最基本实现:constsingletonify=(className)=>{returnnewProxy(className.prototype.constructor,{instance:null,construct:(target,argumentsList)=>{if(!this.instance

功能 - 缓存

2020-03-03 描述返回一个内存(缓存)函数。提示通过实例化一个新的 Map 对象来创建一个空的缓存返回带有一个参数的函数以提供缓存方法,该方法先检查 fn 函数根据指定的输入所返回的输出是否被缓存,如果没有的话就先进行存储,然后再返回必须使用关键字 function,以便在必要时允许返回的缓存函数修改 this 上下文将 cache 设置为返回函数的属性,以便方便的获取所有缓存代码 constmemoize=fn

功能 - 执行频率

2020-03-02 描述返回一个函数每秒执行的次数。hz 是 hertz 的单位,该频率的单位定义为每秒一个周期。提示使用 performance.now()分别获取函数重复执行 iterations 次之前和之后的时间,两个时间相减即可得出所需时间将毫秒转换为秒后再除以函数执行所花费的时间,就可以得到每秒执行的次数第二个参数 iterations 的默认值为 100 代码 consthz=(fn,iterations=

功能 - 函数名称

2020-02-28 描述打印函数的名称。提示使用 console.debug()和参数中的 name 属性进行打印将方法的名称打印到控制台中的 debug 频道代码 constfunctionName=fn=>(console.debug(fn.name),fn);示例将方法名打印到控制台的 debug 频道中:functionName(Math.max);//max 返回总目录每天 30 秒系列之 JavaScript 代

功能 - 延迟执行

2020-02-27 描述 wait 毫秒后调用提供的函数。提示使用 setTimeout()延迟执行 fn 使用扩展运算符...为函数提供任意数量的参数代码 constdelay=(fn,wait,...args)=>setTimeout(fn,wait,...args);示例 1000 毫秒后打印日志:delay(function(text){console.log(text);},1000,'later');返

Vditor 快捷键

SummaryNameKeymapRemarksEmoji:/⌘EHeadingsCtrlH/⌘HseebelowBoldCtrlB/⌘BItalicCtrlI/⌘IStrikeoutCtrlS/⌘SLinkCtrlK/⌘KseebelowUnorderedListCtrlL/⌘LseebelowOrderedListCtrlO/⌘OseebelowTaskListCtrlJ/⌘JseebelowB

功能 - 防止抖动

2020-02-26 描述创建一个防止抖动的函数,使其延迟调用提供的函数,直到上次调用该函数至少经过了 ms 毫秒提示防止抖动函数每一次被调用前,都需要使用 clearTimeout()清空上一次将要运行的 timeout 使用 setTimeout()创建一个新的 timeout,将调用的函数延迟至少 ms 后在执行使用 Function.prototype.apply()设置函数的上下文为 this,并提供必要的参数第

功能 - 异常捕获

2020-02-25 描述尝试从提供的参数中调用其方法,返回运行的结果或者捕获的异常对象。提示使用 try...catch 块来返回函数运行的结果或者是适当的异常代码 constattempt=(fn,...args)=>{try{returnfn(...args);}catch(e){returneinstanceofError?e:newError(e);}};示例根据选择器获取元素,并对选择器错误的情

大前端 - Web Components

2020-02-24 简介 WebComponents 是 W3C 正在向 HTML 和 DOM 规范添加的一套功能,他允许在 Web 应用程序中创建可重用的组件。他由以下三部分组成,可单独或组合使用:Customelements(自定义元素):编写自定义组件的 JavaScriptAPIShadowDOM(影子 DOM)HTMLtemplates(HTML 模板):包含 <template> 和 <slot>Customeleme

Vditor v2.1.14 发布,完善所见即所得编辑模式

简介该版本主要特性如下:为所见即所得模式添加快捷键操作提供主题切换方法:setTheme(theme:"dark"|"classic")支持数学公式渲染配置,可使用"KaTeX"或"MathJax"修复所见即所得模式下的大量 bug 在此感谢 jakekwak 反馈的 bug 和提出的宝贵建议。黑色主题截图升级移除 mathRenderByLute 方法,可使用 mathRender 替代原有 classic.scss 文

酸甜苦辣的 2019

酸甜苦辣今年是创业的第二年,有时觉得很幸苦,有时觉得很慵懒,有时觉得有压力,有时觉得很幸福。也许这就是生活,充满了酸甜苦辣。2019 翻看了去年的总结,很巧,都是大年三十的前一天所写。因此决定以后每年大年二十九为自己加一条:宜写总结点滴生活回忆这一年,感觉每天的日常都差不多:早起-> 送娃-> 吃早点-> 打码-> 午饭-> 散步(B3log 产品讨论会)-> 午睡-> 接娃-> 晚饭-> 陪娃-> 打码-> 煲剧-> 睡觉。

功能 - 柯里化函数

2020-01-23 描述将一个函数实现柯里化传参。提示使用递归如果提供的参数(args)个数充足,则调用传递的函数 fn 否则的话,返回一个包含剩余参数的柯里化函数 fn 如果你想要柯里化一个可以接受任意参数的函数(一个可变参函数,如 Math.min()),你可以将参数的数量传递给第二个可选参数 arity 代码 constcurry=(fn,arity=fn.length,...args)=>arity<=ar

功能 - 调用栈清空后再执行

2020-01-22 描述延迟一个函数的调用,直到调用栈被清空后才执行。提示使用一个 1ms 延迟的 setTimeout()将一个新的事件添加到浏览器事件队列中,并允许渲染引擎完成他的任务使用扩展运算符...将 fn 之后剩余的参数提供给延迟执行的函数作为参数代码 constdefer=(fn,...args)=>setTimeout(fn,1,...args);示例先打印 b 再打印 a:defer(console