<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jwl_willon的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jwl_willon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jwl_willon]]></copyright><item><title><![CDATA[对象数组去重]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/88232686</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/88232686</guid><author>jwl_willon</author><pubDate>Wed, 06 Mar 2019 13:52:29 +0800</pubDate><description><![CDATA[对象去重？伪命题吧，但是面试时还真有过，但是当时脑抽了，没能写出来，现在来补充一下，凑合能用


function isObj(obj){ // 宽松判断
    return typeof obj === 'object'
}
function objToString(obj){
	   return JSON.stringify(sortKey(obj)) // JSON.stringify是...]]></description><category></category></item><item><title><![CDATA[webkit内核渲染原理]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/86710161</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/86710161</guid><author>jwl_willon</author><pubDate>Thu, 31 Jan 2019 00:13:54 +0800</pubDate><description><![CDATA[当用户输入URL之后，浏览器的网络资源模块就会发网络请求并建立连接，从而加载URL对应的html文档
	这时Browser进程（浏览器唯一主进程）就会分叉一个Render进程，然后Render进程又会产生一个HTMLParserThread去专门负责html的解析
	在网络模块的ResourceLoader类或者CacheRawResource类就会将收到的数据传给HTMLDocumenParse...]]></description><category></category></item><item><title><![CDATA[浏览器重排重绘]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/86710058</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/86710058</guid><author>jwl_willon</author><pubDate>Wed, 30 Jan 2019 23:53:48 +0800</pubDate><description><![CDATA[什么是重排、重绘

由于某个元素的布局几何属性发生了比变化而导致了其他元素位置的变化，浏览器就会使渲染树中受到影响的部分失效，并重新构造新的渲染树，这个过程就成为浏览器的重排操作；

重排之后必会触发重绘，浏览器会重新绘制受影响的部分到屏幕上，此过程就是浏览器的“重绘”

何时会触发重排

当页面布局的几何属性改变时就需要重排

添加或删除可见的DOM元素
	元素的位置改变
	元素的尺寸改变
	内...]]></description><category></category></item><item><title><![CDATA[Node.js实战技巧（一）常见异常及处理]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/85082334</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/85082334</guid><author>jwl_willon</author><pubDate>Tue, 18 Dec 2018 23:54:37 +0800</pubDate><description><![CDATA[几种常见异常：

throw new Error('xxxx') // 手动或程序抛出的异常  
	JSON.parse(json) // 当我们不确定json是否合法时这里会经常发生SyntaxError异常
	
	function(err,data){
	    res.write(dat)  // ReferenceError:dat is not defind
	}
	
	
	var Ev...]]></description><category></category></item><item><title><![CDATA[jsonp的介绍与其优缺点的例举]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/82779267</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/82779267</guid><author>jwl_willon</author><pubDate>Wed, 19 Sep 2018 22:40:05 +0800</pubDate><description><![CDATA[#跨域的介绍

         跨域问题源于浏览器的“同源策略“的限制，所以所谓的跨域问题是针对于（B/S）端而言的，而jsonp正是利用script标签的src属性来实现的（因为此特性不在“同源策略”内，浏览器对此不做拦截）了解更多jsonp的实例。

# 优点：

能很好的解决跨域问题。
	速度快 。(相对与动态脚本注入与XHR的性能来说，应该是客户端获取并解析数据最快的方法；参考文献--《...]]></description><category></category></item><item><title><![CDATA[JS闭包的理解及其优缺点]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/82563240</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/82563240</guid><author>jwl_willon</author><pubDate>Sun, 09 Sep 2018 23:59:41 +0800</pubDate><description><![CDATA[“闭包”形成的几种说法：

初级理解---《js高程》（“小红书”）：闭包是指有权访问另一个函数作用域中变量的函数。（其认为闭包是一个函数）
	中级理解---《 You don't know JS 》（“小黄书”）：闭包是导致函数调用栈不能正常销毁的一种持续引用 （这种引用一般体现于某个函数体内其他函数的声明）
	高级理解---形成闭包的真正原因是：作用域未能正常释放，变量的引用标记持续存在，即使...]]></description><category></category></item><item><title><![CDATA[jsonp实例（仿百度首页效果）以及介绍前后台之间是如何配合的]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/82562593</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/82562593</guid><author>jwl_willon</author><pubDate>Sun, 09 Sep 2018 21:36:35 +0800</pubDate><description><![CDATA[咱们先上效果图哈（真能搜索的呦、功能齐全） gitbub demo链接（小时候写的demo、代码粗糙、那时候OOP、OLOO思想还不够蒂固、性能优化也没注意、仅供大家参考哈！！！）



# 前端关键代码：（借用百度的api:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=&quot;+data+&quot;&amp;amp;cb=myJsonp）

wd=“要...]]></description><category></category></item><item><title><![CDATA[js获取querystring(封装)]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/82431809</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/82431809</guid><author>jwl_willon</author><pubDate>Wed, 05 Sep 2018 22:36:01 +0800</pubDate><description><![CDATA[
/**
 *若没有传入url
 *就获取本地location.search
 *并且以对象的形式返回
 *
 */
function querystring2obj(url){ 
    var queryArr = (url &amp;amp;&amp;amp; url.substr(url.indexOf('?') + 1).split('&amp;amp;')) ||           
        loc...]]></description><category></category></item><item><title><![CDATA[express静态资源拦截]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/81985507</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/81985507</guid><author>jwl_willon</author><pubDate>Thu, 23 Aug 2018 18:04:46 +0800</pubDate><description><![CDATA[
var express = require('express')
var app = express()
var port = 4040

// 通配符拦截所有路由请求，作逻辑判断
app.use('*',function(req,res,next){
    /*if(req.xxx){
        // 逻辑代码 
        next() // 放行  
    }else{
  ...]]></description><category></category></item><item><title><![CDATA[Emmet 使用缩写语法快速编写 HTML、CSS 提高开发效率]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/81606404</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/81606404</guid><author>jwl_willon</author><pubDate>Sun, 12 Aug 2018 14:49:17 +0800</pubDate><description><![CDATA[看到网上有这篇文章之后，我也懒得写了，挺棒的

转载自：https://segmentfault.com/a/1190000007812543

很多主流编译器自带这个插件且与css的选择器语法有不少相同之处，极易上手。

缩写

Emmet使用特殊的表达式Abbreviations，也就是缩写：这种特殊的表达式会被Emmet解析并转义成结构化的代码块。Emmet使用类似CSS选择器的语法来描述元...]]></description><category></category></item><item><title><![CDATA[npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置]]></title><link>https://blog.youkuaiyun.com/jwl_willon/article/details/81054978</link><guid>https://blog.youkuaiyun.com/jwl_willon/article/details/81054978</guid><author>jwl_willon</author><pubDate>Sun, 15 Jul 2018 19:01:22 +0800</pubDate><description><![CDATA[备注：&amp;lt;=&amp;gt; 意为等价于；

1、npm install &amp;lt;=&amp;gt; npm i

     --save   &amp;lt;=&amp;gt; -S     

     --save-dev  &amp;lt;=&amp;gt; -D 

      npm run start &amp;lt;=&amp;gt; npm start  // 对应&quot;scripts&quot;里的&quot;start&quot;命令

      少敲几下键]]></description><category></category></item></channel></rss>