<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Ghmin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/G_ing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; G_ing]]></copyright><item><title><![CDATA[基于postCSS手写postcss-px-to-vewiport插件实现移动端适配]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/138082124</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/138082124</guid><author>G_ing</author><pubDate>Mon, 22 Apr 2024 17:33:11 +0800</pubDate><description><![CDATA[目前前端实现移动端适配方案千千万，眼花缭乱各有有缺，但目前来说postcss-px-to-vewiport是一种非常合适的实现方案，是一个基于postCss开发的插件，其原理就是将项目中的px单位转换为vw(视口宽度)。]]></description><category></category></item><item><title><![CDATA[postCss基本介绍]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/138073748</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/138073748</guid><author>G_ing</author><pubDate>Mon, 22 Apr 2024 16:09:11 +0800</pubDate><description><![CDATA[我个人的理解postCss就是css界的babel，它提供一个过程，而在这个过程中，去干什么就是你自己的事情，所以很多人写插件，去做代码转换，或者兼容等等。babel 提供过程 @babel/preset-env  es6-es5AST ->-> generate(生成)postCss提供过程`css`AST -> transform -> generate(生成)两者都是提供一个过程，只是一个是处理javaScript，一个是处理css。这个过程中AST。]]></description><category></category></item><item><title><![CDATA[JS浮点数精度问题及解决方案]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134788122</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134788122</guid><author>G_ing</author><pubDate>Mon, 04 Dec 2023 16:45:51 +0800</pubDate><description><![CDATA[因为浮点数的计算存在round-off问题，也就是浮点数不能够进行精确的计算。并且：

不仅JavaScript，所有遵循IEEE 754规范的语言都是如此；
在JavaScript中，所有的Number都是以64-bit的双精度浮点数存储的；
双精度的浮点数在这64位上划分为3段，而这3段也就确定了一个浮点数的值，64bit的划分是“1-11-52”的模式，具体来说：
就是1位最高位（最左边那一位）表示符号位，0表示正，1表示负；
11位表示指数部分；
52]]></description><category></category></item><item><title><![CDATA[函数柯里化]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134766995</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134766995</guid><author>G_ing</author><pubDate>Sun, 03 Dec 2023 17:08:13 +0800</pubDate><description><![CDATA[柯里化（currying）又称部分求值。一个柯里化的函数首先会接受一些参数，接受了这些参数之后，该函数并不会立即求值，而是继续返回另外一个函数，刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候，之前传入的所有参数都会被一次性用于求值。]]></description><category></category></item><item><title><![CDATA[JavaScript递归]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134766747</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134766747</guid><author>G_ing</author><pubDate>Sun, 03 Dec 2023 16:52:01 +0800</pubDate><description><![CDATA[使用递归时需要注意如下事项：

递归函数的优点是定义简单，逻辑清晰。理论上，所有的递归函数都可以用循环的方式来实现。

使用递归时需要注意防止栈溢出。在计算机中，函数调用是通过栈（stack）这种数据结构实现的，每当一个函数调用，栈就会加一层，每当函数返回，栈就会减一层。由于栈的大小不是无限的，所以递归调用的次数过多，会导致栈溢出。]]></description><category></category></item><item><title><![CDATA[阻止事件默认行为]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134766445</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134766445</guid><author>G_ing</author><pubDate>Sun, 03 Dec 2023 16:39:01 +0800</pubDate><description><![CDATA[如何阻止默认事件？方法一：全支持 event.preventDefault();// 方法二：该特性已经从 Web 标准中删除，虽然一些浏览器目前仍然支持它，但也许会在未来的某个时间停止支持，请尽量不要使用该特性。
event.returnValue = false;// 方法三：不建议滥用，jQuery 中可以同时阻止冒泡和默认事件
return false;]]></description><category></category></item><item><title><![CDATA[DOM 事件的传播机制]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134748929</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134748929</guid><author>G_ing</author><pubDate>Sat, 02 Dec 2023 18:07:45 +0800</pubDate><description><![CDATA[事件委托，又被称之为事件代理。在JavaScript中，添加到页面上的事件处理程序数量将直接关系到页面整体的运行性能。导致这一问题的原因是多方面的。

首先，每个函数都是对象，都会占用内存。内存中的对象越多，性能就越差。其次，必须事先指定所有事件处理程序而导致的DOM访问次数，会延迟整个页面的交互就绪时间。

对事件处理程序过多问题的解决方案就是事件委托。

事件委托利用了事件冒泡，只指定一个事件处理程序，就可以管理某一类型的所有事件。例如，click事件会一直冒泡到document层次。也就]]></description><category></category></item><item><title><![CDATA[DOM 事件的注册和移除]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134748530</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134748530</guid><author>G_ing</author><pubDate>Sat, 02 Dec 2023 14:16:41 +0800</pubDate><description><![CDATA[注册事件的方式常见的有3种方式：HTML元素中注册的事件：这种方式又被称之为行内事件监听器。这是在浏览器中处理事件最原始的方法。DOM0级方式注册事件：这种方式是首先取到要为其绑定事件的元素节点对象，然后给这些节点对象的事件处理属性赋值一个函数。]]></description><category></category></item><item><title><![CDATA[垃圾回收与内存泄漏]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134742367</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134742367</guid><author>G_ing</author><pubDate>Sat, 02 Dec 2023 09:04:29 +0800</pubDate><description><![CDATA[程序的运行需要内存。只要程序提出要求，操作系统或者运行时（runtime）就必须供给内存。对于持续运行的服务进程（daemon），必须及时释放不再用到的内存。否则，内存占用越来越高，轻则影响系统性能，重则导致进程崩溃。也就是说，不再用到的内存，如果没有及时释放，就叫做内存泄漏（JavaScript。]]></description><category></category></item><item><title><![CDATA[作用域和作用域链]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134742137</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134742137</guid><author>G_ing</author><pubDate>Fri, 01 Dec 2023 19:17:06 +0800</pubDate><description><![CDATA[作用域是在运行时代码中的某些特定部分中变量，函数和对象的可访问性。换句话说，作用域决定了代码区块中变量和其他资源的可见性。var inVariable = "内层变量2";outFun2();从上面的例子可以体会到作用域的概念，变量inVariable在全局作用域没有声明，所以在全局作用域下取值会报错。作用域就是一个独立的地盘，让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量，不同作用域下同名变量不会有冲突。ES6之前JavaScript。]]></description><category></category></item><item><title><![CDATA[执行栈和执行上下文]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134729361</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134729361</guid><author>G_ing</author><pubDate>Fri, 01 Dec 2023 11:20:47 +0800</pubDate><description><![CDATA[什么是执行上下文？简而言之，执行上下文是评估和执行JavaScript代码的环境的抽象概念。每当Javascript代码在运行的时候，它都是在执行上下文中运行。]]></description><category></category></item><item><title><![CDATA[原型和原型链]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134720916</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134720916</guid><author>G_ing</author><pubDate>Thu, 30 Nov 2023 20:26:21 +0800</pubDate><description><![CDATA[在设计JavaScript时，借鉴了Self和Smalltalk这两门基于原型的语言。之所以选择基于原型的对象系统，是因为一开始就没有打算在JavaScript中加入类的概念，因为JavaScript的设计初衷就是为非专业的开发人员（例如网页设计者）提供一个方便的工具。由于大部分网页设计者都没有任何的编程背景，所以在设计JavaScript时也是尽可能使其简单、易学。这因为如此，JavaScript。]]></description><category></category></item><item><title><![CDATA[JavaScript中数据类型的转换]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134715505</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134715505</guid><author>G_ing</author><pubDate>Thu, 30 Nov 2023 16:44:14 +0800</pubDate><description><![CDATA[JavaScript是一种动态类型语言，变量没有类型限制，可以随时赋予任意值。var x = y?1 : 'a';上面代码中，变量x到底是数值还是字符串，取决于另一个变量y的值。y为true时，x是一个数值；y为false时，x是一个字符串。这意味着，x的类型没法在编译阶段就知道，必须等到运行时才能知道。虽然变量的数据类型是不确定的，但是各种运算符对数据类型是有要求的。如果运算符发现，运算子的类型与预期不符，就会自动转换类型。]]></description><category></category></item><item><title><![CDATA[JavaScript包装类型]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134689461</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134689461</guid><author>G_ing</author><pubDate>Wed, 29 Nov 2023 19:59:53 +0800</pubDate><description><![CDATA[在ES中，数据的分类分为基本数据类型和引用类型。
按照最新ES标准定义，基本数据类型（primitive value）包括undefined、null、boolean、number、symbol、string。

引用类型包括Object、Array、Date、RegExp等。]]></description><category></category></item><item><title><![CDATA[JavaScript值和引用]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134689172</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134689172</guid><author>G_ing</author><pubDate>Wed, 29 Nov 2023 17:35:23 +0800</pubDate><description><![CDATA[引用一个复杂对象时，使用它的名称（即变量或对象属性）通过内存中的引用地址获取该对象值。直接赋值，就是指将简单值赋值给变量，而引用赋值是指将一个复杂值的引用赋值给变量，这个引用指向堆区实际存在的数据。复杂值支持动态对象属性，因为我们可以定义对象，然后创建引用，再更新对象，并且所有指向该对象的变量都会获得更新。基本数据类型的值又被称之为原始值或简单值，而引用数据类型的值又被称之为复杂值或引用值。基本数据类型的值又被称之为原始值或简单值，而引用数据类型的值又被称之为复杂值或引用值。中，对象就是一个引用值。]]></description><category></category></item><item><title><![CDATA[【封装UI组件库系列】封装Button图标组件]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134631037</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134631037</guid><author>G_ing</author><pubDate>Tue, 28 Nov 2023 22:57:36 +0800</pubDate><description><![CDATA[上一篇我们已经封装了第一个Icon组件，接下来我们就开始封装Button组件。分析封装组件所需支持的属性与事件。]]></description><category></category></item><item><title><![CDATA[【封装UI组件库系列】封装Icon图标组件]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134542149</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134542149</guid><author>G_ing</author><pubDate>Thu, 23 Nov 2023 22:03:34 +0800</pubDate><description><![CDATA[在前端开发中，大家可能已经用过各种各样的UI组件库了，现在市面上热门的有Element-uiAnt Design等等，这些即插即用的组件库确实大大提升了开发效率，避免了很多的重复劳动，但这些组件库再怎么完善，又怎么能满足得了我们可爱的产品经理呢？所以工作中难免会需要开发公司内部的UI组件库，或者基于已有组件库进行二开。【封装UI组件库系列】文章，将从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》使用自己封装的组件库。]]></description><category></category></item><item><title><![CDATA[【封装UI组件库系列】全局样式的定义与重置]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134520221</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134520221</guid><author>G_ing</author><pubDate>Tue, 21 Nov 2023 21:53:19 +0800</pubDate><description><![CDATA[在前端开发中，大家可能已经用过各种各样的UI组件库了，现在市面上热门的有Element-uiAnt Design等等，这些即插即用的组件库确实大大提升了开发效率，避免了很多的重复劳动，但这些组件库再怎么完善，又怎么能满足得了我们可爱的产品经理呢​？所以工作中难免会需要开发公司内部的UI组件库，或者基于已有组件库进行二开。【封装UI组件库系列】文章，将从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》使用自己封装的组件库。]]></description><category></category></item><item><title><![CDATA[【封装UI组件库系列】搭建项目及准备工作]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134496088</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134496088</guid><author>G_ing</author><pubDate>Mon, 20 Nov 2023 22:05:24 +0800</pubDate><description><![CDATA[【封装UI组件库系列】文章会持续更新，将带着大家从0开始--》搭建项目--》封装八大经典功能组件--》打包组件库--》将组件库发布至npm--》最后使用自己封装的组件库。如果文中出现有瑕疵的地方各位通过评论或者私信联系我，我们一起进步！从零开始封装UI组件库完整篇。]]></description><category></category></item><item><title><![CDATA[浏览器自动播放音视频-前端实现方案]]></title><link>https://blog.youkuaiyun.com/G_ing/article/details/134145115</link><guid>https://blog.youkuaiyun.com/G_ing/article/details/134145115</guid><author>G_ing</author><pubDate>Mon, 06 Nov 2023 17:49:03 +0800</pubDate><description><![CDATA[在开发中可能有遇到这样的需求，当用户打开页面后，需要自动播放视频或音频，按理说那就打开页面时play()一下不就搞定了吗，但实际情况很明显不是，不然也没得这篇文章喽，要实现这个需求，我们得先了解一下浏览器自动播放策略。再给出相应解决方案。]]></description><category></category></item></channel></rss>