浅谈函数柯里化
什么是函数柯里化在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。 简单来说,就是固定一个需要多个参数的函数的部分参数,返回一个接受剩余参数的函数,当然这个转化流程需要固定多少个参数,返回的函数需要接收多少个参数,这都是有开发者自己定义的,当然,这两个的个数相加会等于这个函数原始情况需要的参数个数。 函数柯里化的作用是什么上面简单的说明过了函数柯里化的作用,固定某些参数,得到一个接收余下参数的函数。 这能够给我们带来的就是 参数复用,在不侵入原函数的情况下,为原函数预置通用参数。 提前返回,在一个复杂函数柯里化之后,能够得到一个固定完部分逻辑的函数。 延迟执行,得到函数以后,执行的时机点也还是能够由开发者决定。 参数复用假如说现在设计一个函数 add 这个函数接收两个参数 x,y ,返回的结果就是两个数相加。 但是当我们需要多次调用这个函数并且每次 x 的值都是固定的的时候。 123456789function add(x, y) { retur...
vue3静态文件打包404解决方案
前言在 Vue3 + Vite 项目开发过程中,经常会遇到静态资源文件(如第三方 JS 库、图片、字体等)在开发环境正常,但打包后出现 404 错误的问题。本文通过一个实际案例——引入 MarchingSquares.js 库的过程,详细分析问题的原因和解决方案。 问题背景项目中需要使用 MarchingSquares.js 这个第三方库,该库需要在 HTML 中通过 <script> 标签直接引入。在开发过程中,我们尝试了多种路径配置方式,但都遇到了不同的问题: 使用相对路径 ./MarchingSquaresJS/MarchingSquares.js:打包后文件不存在 使用 ./public/MarchingSquaresJS/MarchingSquares.js:打包后文件存在,但访问时 404 最终使用 /MarchingSquaresJS/MarchingSquares.js:开发和生产环境都正常 解决方案尝试一:使用相对路径 ./MarchingSquaresJS/MarchingSquares.js配置方式: 1<script type=&qu...
Vue3 项目中使用 @antfu/eslint-config 完整指南
前言在现代前端开发中,代码质量和一致性是项目成功的关键因素。ESLint 作为 JavaScript/TypeScript 代码检查工具,能够帮助开发者发现潜在问题、统一代码风格。@antfu/eslint-config 是由 Anthony Fu 维护的一套开箱即用的 ESLint 配置,特别针对 Vue 3、TypeScript 和现代 JavaScript 项目进行了优化。 本文档基于实际项目经验,详细介绍了如何在 Vue3 + TypeScript + Vite 项目中正确配置和使用 @antfu/eslint-config,并记录了常见问题的解决方案。 目的本文档旨在帮助开发者: 快速在 Vue3 项目中集成 @antfu/eslint-config 理解配置选项的含义和作用 解决常见的解析错误和配置问题 掌握最佳实践和注意事项 配置1. 安装依赖首先,确保你的项目已经安装了必要的依赖: 1pnpm add -D @antfu/eslint-config eslint 或者使用 npm/yarn: 123npm install -D @antf...
不使用 try-catch 捕获 async-await 异常
前言我们一般都是使用 try-catch 来处理 async-await 异常,这样写本质上也没什么问题,async-await 异常处理的本质原因是:避免异步操作的报错导致接下去的代码都无法执行,所以需要添加异常处理。 多个异步请求串行123456try { // 获取列表list const list = await getList(params); // 获取单个详情 const info = await getListById(list[0]?.id);} catch {} 前一个异步请求的返回结果,会作为后一个异步请求的请求参数使用,所以一旦前一个请求异常,后面的请求肯定会异常,所以需要添加 try-catch 处理。 但是存在一些问题,如果每一个 async-await 都这样来添加异常处理,会产生很多的冗余代码,而且代码整体看起来也不是很美观,感觉都是在重复, 简化异常处理的方法使用 Promise 处理首先需要明确一点:正常情况下,await 命令后面是一个 Promise 对象。所以它本身就可以使用.catch来...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
不使用 try-catch 捕获 async-await 异常
前言我们一般都是使用 try-catch 来处理 async-await 异常,这样写本质上也没什么问题,async-await 异常处理的本质原因是:避免异步操作的报错导致接下去的代码都无法执行,所以需要添加异常处理。 多个异步请求串行123456try { // 获取列表list const list = await getList(params); // 获取单个详情 const info = await getListById(list[0]?.id);} catch {} 前一个异步请求的返回结果,会作为后一个异步请求的请求参数使用,所以一旦前一个请求异常,后面的请求肯定会异常,所以需要添加 try-catch 处理。 但是存在一些问题,如果每一个 async-await 都这样来添加异常处理,会产生很多的冗余代码,而且代码整体看起来也不是很美观,感觉都是在重复, 简化异常处理的方法使用 Promise 处理首先需要明确一点:正常情况下,await 命令后面是一个 Promise 对象。所以它本身就可以使用.catch来...
2025年终总结
好久没写年终总结了,前几年老是觉得生活好像平平淡淡,没什么好写的,但是今年确实有一些比较大的生活改变,想简单自己记录一下回顾一下这一年 💪健身作为健身的第二个年头,回想起去年的训练,我真的很感谢健身和骑行,也是这两个运动拯救了那个整天只会宅着打游戏的自己,也算是以此认识到了更宽阔的天地。 去年新手期总是容易追求大重量,第一年状态好的时候也上过卧推100kg,但是顶跨,起大桥,动作不标准,等等等一堆问题,新手期的通病。而且只以重量作为目标,完全没有控制自己的饮食,在今年年初过年的时候体重一度来到了75kg(170净身高)😓 但是今年逐渐意识到了纸包鸡好像并不是非常的美观,所有今年过完年回来后开始参考网上的教程减脂,3月份开始到7月份,也算是有一个比较大的变化,在这里小小的臭美一下 现在也开始习惯了碳循环的饮食方式,从一开始的不知道要怎么吃,以及对体重减的太慢的焦虑,开始慢慢的变成了游刃有余的一种自在。把饮食融入生活,不那么追求极致就会发现,其实慢慢来没那么难。 👔工作想来工作也有4年了,实际毕业3年多(实习了几乎一年)。今年6月份喜提大礼包,在厦门找了一圈才发现,现在的大环...