<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[evalost的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/evalost</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; evalost]]></copyright><item><title><![CDATA[JS变量声明提升]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/118121022</link><guid>https://blog.youkuaiyun.com/evalost/article/details/118121022</guid><author>evalost</author><pubDate>Tue, 22 Jun 2021 22:58:34 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/suihang/p/13399935.html
]]></description><category></category></item><item><title><![CDATA[js字符串补位（前补零/后补零）]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107993152</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107993152</guid><author>evalost</author><pubDate>Thu, 13 Aug 2020 22:46:27 +0800</pubDate><description><![CDATA[以前经常会遇到需要给字符串补零的时候，比如把日期转换为期望的格式：


function dateFormat (date, fmt) {
  var o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    ']]></description><category></category></item><item><title><![CDATA[webpack处理图片资源--？]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107318298</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107318298</guid><author>evalost</author><pubDate>Mon, 13 Jul 2020 15:42:49 +0800</pubDate><description><![CDATA[未解之谜：好像没有办法可以处理直接写在html文件中的style标签的样式？比如怎么也获取不到style标签里的背景图片资源的之类的。。

url-loader &amp; file-loader：处理css文件中的图片资源
	html-loader / html-withimg-loader：处理html中直接引入的img图片资源（区别？）
...]]></description><category></category></item><item><title><![CDATA[数组操作系列]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107184603</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107184603</guid><author>evalost</author><pubDate>Wed, 08 Jul 2020 09:31:57 +0800</pubDate><description><![CDATA[判断是否为数组
	伪数组转为数组
	数组去重
	数组拍平
	排序算法
判断是否为数组

var arr = [1,2,3]

Array.isArray(arr)  // true
arr.constructor == Array  // true
arr instanceof Array  // true
Object.prototype.toString.call(arr)  // "[object Array]"

伪数组转为数组

// es5
Array.prototype.slice.call(]]></description><category></category></item><item><title><![CDATA[使用CleanWebpackPlugin报错]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107142373</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107142373</guid><author>evalost</author><pubDate>Sun, 05 Jul 2020 18:02:35 +0800</pubDate><description><![CDATA[自己写的项目尝试使用webpack打包，因为开发时配置改动也很频繁，最终打包的dist文件夹中，有一些多余的文件。

在webpack文档中有一个CleanWebpackPlugin插件，可以：


在每次构建前清理/dist文件夹。

...]]></description><category></category></item><item><title><![CDATA[从代码/资源/webpack方面考虑前端的性能优化]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107140700</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107140700</guid><author>evalost</author><pubDate>Sun, 05 Jul 2020 16:57:53 +0800</pubDate><description><![CDATA[从三个维度简单整理一下前端性能优化可以做什么（不同维度之间有重叠）：

代码优化
减少dom操作，避免引起重绘和重排（回流）
	事件绑定采取事件委托的方式（减少dom引用和内存占用）
	减少闭包的使用（避免内存溢出，减少作用域链的查找层级）
	使用函数防抖/节流 （避免无限制调用）
	使用css选择器时减少选择层级（css选择器是从右向左解析的，原来层级越多查找越慢TT）
资源优化
使用tinypng等压缩图片资源
	使用cdn链接方式引入
	使用精灵图（减少请求次数）
	合并/压缩js、css图片（减少h]]></description><category></category></item><item><title><![CDATA[css-loader、style-loader顺序]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107118157</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107118157</guid><author>evalost</author><pubDate>Sat, 04 Jul 2020 00:18:17 +0800</pubDate><description><![CDATA[webpack使用css-loader和style-loader时，有个顺序问题：

loader的加载顺序是从右往左，编译顺序应该是先用css-loader编译css代码，再用style-loader放入到网页的style标签里面去。所以css-loader在右，style-loader在左。


module: {
    rules: [
        {
            test: /\.css$/,
            use: ['style-loader', 'css-loade]]></description><category></category></item><item><title><![CDATA[vue路由懒加载 / 按需加载的两种方式]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/107059608</link><guid>https://blog.youkuaiyun.com/evalost/article/details/107059608</guid><author>evalost</author><pubDate>Wed, 01 Jul 2020 11:49:23 +0800</pubDate><description><![CDATA[当项目过大时，我们可以使用按需加载来减少首屏加载的时间，避免白屏、等待时间过长等问题。

   常用的懒加载方式有两种：

1.vue的异步组件


const routes = [
    {
        path:'./home',
        name: 'Home',
        component: (resolve) =&gt; {
            require('../views/Home.vue', resolve)
        }     
...]]></description><category></category></item><item><title><![CDATA[js在浏览器和node中的解析机制-Event Loop]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106591976</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106591976</guid><author>evalost</author><pubDate>Tue, 30 Jun 2020 18:12:20 +0800</pubDate><description><![CDATA[事件流

DOM0事件

DOM2事件
]]></description><category></category></item><item><title><![CDATA[js阻止事件冒泡和默认事件]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106616538</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106616538</guid><author>evalost</author><pubDate>Tue, 30 Jun 2020 18:11:35 +0800</pubDate><description><![CDATA[1.event.stopPropagation()方法

这是阻止事件的冒泡方法，不让事件向documen上蔓延，但是默认事件任然会执行，当你掉用这个方法的时候，如果点击一个连接，这个连接仍然会被打开，

2.event.preventDefault()方法

这是阻止默认事件的方法，调用此方法是，连接不会被打开，但是会发生冒泡，冒泡会传递到上一层的父元素；

3.return false ；

这个方法比较暴力，他会同事阻止事件冒泡也会阻止默认事件；写上此代码，连接不会被打开，事件也不会传递到上一层的父.]]></description><category></category></item><item><title><![CDATA[vue-cli-service: command not found]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106935885</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106935885</guid><author>evalost</author><pubDate>Wed, 24 Jun 2020 02:52:55 +0800</pubDate><description><![CDATA[最近升级了vue-cli，从2.x版本跳到了4.x的@vue/cli：


# 先卸载旧版
npm uninstall -g vue-cli   
# 安装新版
npm install -g @vue/cli  

文档中有这么一段：


在一个 Vue CLI 项目中，@vue/cli-service 安装了一个名为 vue-cli-service 的命令。
你可以在 npm scripts 中以 vue-cli-service、
或者从终端中以 ./node_modules/.bin/vue-cli-s]]></description><category></category></item><item><title><![CDATA[一道有意思的题目]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106926534</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106926534</guid><author>evalost</author><pubDate>Tue, 23 Jun 2020 16:34:27 +0800</pubDate><description><![CDATA[['1', '2', '3'].map(parseInt)  // 输出[1, NaN, NaN]


延伸题：


let unary = fn =&gt; val =&gt; fn(val)
let parse = unary(parseInt)
console.log(['1.1', '2', '0.3'].map(parse)) // [1, 2, 0]


若想把字符串数组转为数字数组：


['1', '2', '3'].map(parseFloat)  // 输出[1, 2, 3]
// p.]]></description><category></category></item><item><title><![CDATA[display:none 和visibility:hidden的区别]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106753671</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106753671</guid><author>evalost</author><pubDate>Sun, 14 Jun 2020 23:10:57 +0800</pubDate><description><![CDATA[display: none
设置属性后，元素消失在文档流中，不再占位。因此也会导致文档页面重新构建，产生回流。=》性能差。
	元素以及它的所有后代元素都会隐藏。
visibility: hidden
隐藏元素仍需占用与未隐藏时一样的空间，即仍然会占位，影响页面布局。也因此不会产生回流。
	visibility具有继承性，给父元素设置visibility:hidden;子元素也会继承这个属性。如果重新给子元素设置visibility: visible,子元素又会显示出来。
...]]></description><category></category></item><item><title><![CDATA[搞懂js函数柯里化]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106641798</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106641798</guid><author>evalost</author><pubDate>Wed, 10 Jun 2020 11:52:07 +0800</pubDate><description><![CDATA[柯里化（Currying）是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数，并且返回接受余下的参数且返回结果的新函数的技术。

   简单来说，以前写一个sum函数求两数之和，调用时是sum(a,b)，而柯里化之后的调用方式则变成了sum(a)(b)...

   从公调用方法可以看出，sum函数返回的一定还是一个可被持续调用的函数。因此js中函数柯里化的基本方法也是：使用闭包来返回一个函数。

将函数柯里化的通用方式如下：


funtcion cu...]]></description><category></category></item><item><title><![CDATA[赋值、浅拷贝和深拷贝的区别]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/106539730</link><guid>https://blog.youkuaiyun.com/evalost/article/details/106539730</guid><author>evalost</author><pubDate>Thu, 04 Jun 2020 10:25:22 +0800</pubDate><description><![CDATA[js中数据类型分为简单数据类型（Undefined、Null、Boolean、String、Number）和复杂数据类型（Object），基本数据类型按值访问，复杂数据类型按引用访问。变量的值也就分为基本类型值和引用类型值。基本类型值就是简单的数据段，引用类型值则是由多个值构成的对象。

1、赋值

基本类型值在内存中占用固定大小，因为被保存在栈内存里。给新变量赋值原变量的基本类值时，会创建一个新的副本，然后把这个值复制到给新变量分配的位置上。
	引用类型值保存在堆内存中（动态分配空间），js不允许直接访问]]></description><category></category></item><item><title><![CDATA[动态加载js如何保证顺序执行？]]></title><link>https://blog.youkuaiyun.com/evalost/article/details/103780497</link><guid>https://blog.youkuaiyun.com/evalost/article/details/103780497</guid><author>evalost</author><pubDate>Tue, 31 Dec 2019 14:21:45 +0800</pubDate><description><![CDATA[我们知道，可以使用创建script标签的方法来动态加载js文件。

但随之带来问题，如果创建多个script标签来加载多个js文件，这些文件是异步并行加载的，最后执行顺序不能保证是当初的scrpit标签创建顺序。

也就是说，如果我们引入的js之间有依赖关系，能不能加载成功不报错 就是个随机事件了～


function createScript (src) {
    let script = ...]]></description><category></category></item></channel></rss>