<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sunshine215的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sunshine215</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sunshine215]]></copyright><item><title><![CDATA[js作用域]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/109293478</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/109293478</guid><author>sunshine215</author><pubDate>Tue, 27 Oct 2020 14:45:13 +0800</pubDate><description><![CDATA[编译过程
词法分析、语法分析（生成AST）和代码生成（因为js是编译语言，但不是提前编译的）
js的编译发生在代码执行前几微秒甚至更短，在编译阶段，js使用各种方法（JIT）来保证性能的最佳。
js编译器过程：对代码进行编译-》准备执行代码-〉执行代码
var a = 1的引擎的工作步骤
编译起编译，引擎运行。
1、编译器遇到var a，询问作用域在相同的作用域下是否有该变量，有则忽略，并使用已有的变量，继续下一步的编译。没有就会通知作用域在当前作用域下，声明一个新变量，并命名为a；
2、引擎运行a=1。引]]></description><category></category></item><item><title><![CDATA[cookie和session的区别]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/97658271</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/97658271</guid><author>sunshine215</author><pubDate>Mon, 29 Jul 2019 17:46:44 +0800</pubDate><description><![CDATA[1、定义
cookie：是服务端发送给客户端的信息，是很小量的，以key=value的形式存在。
session：保存在服务端的用户状态。
2、机制原理
cookie：客户端请求服务端时，如果需要记录用户状态，服务端会通过response向浏览器颁发一个cookie，浏览器会存储起来，待下一次请求的时候，会连同cookie一个发给服务端。
session：客户端请求创建一个session，服务端会...]]></description><category></category></item><item><title><![CDATA[封装自己的cookie设置和获取的方法]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/97656046</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/97656046</guid><author>sunshine215</author><pubDate>Mon, 29 Jul 2019 17:14:25 +0800</pubDate><description><![CDATA[项目中对cookie的操作是比较频繁的，因此我们封装起来一个方法供调用。
我们采用ES6封装为一个js，供外界引入调用。
let cookie = document.ccokie,
    encode = encodeURIComponent,
    decode = decodeURLComponent;
export default {
    // 获取cookie
    get (k...]]></description><category></category></item><item><title><![CDATA[js求数组中三个数的最大乘积]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/90673548</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/90673548</guid><author>sunshine215</author><pubDate>Wed, 29 May 2019 16:34:42 +0800</pubDate><description><![CDATA[思路分析：将数组先排序。如果全是正数，则最后三位数的乘积最大。若有负数，则最小两位数相乘后再和最后一位数相乘，和最后三位数的乘积比较，取较大的。

实现方法一

数组排序；
计算数组最后三项的乘积；
计算数组前两项和最后一项的乘积；
取计算结果较大者。

// An highlighted block
function maxThreeSum (array) {
   var sort_arra...]]></description><category></category></item><item><title><![CDATA[js面试题关于this指向分析]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/79411867</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/79411867</guid><author>sunshine215</author><pubDate>Thu, 01 Mar 2018 14:20:23 +0800</pubDate><description><![CDATA[分析以下问题的打印结果及原因： 
1、



  let num = 10;
  function fn() {
    console.log(this.num);
  }
  let obj = {
    num:5,
    method: function(fn) {
      fn();
      arguments[0]();
    }
  };
  obj.method(fn...]]></description><category></category></item><item><title><![CDATA[JavaScript异步编程的发展]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/79237294</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/79237294</guid><author>sunshine215</author><pubDate>Fri, 02 Feb 2018 11:46:04 +0800</pubDate><description><![CDATA[JavaScript的执行环境是单线程的，一次只能做一件事，有多个任务的时候，就必须排队等待。这种模式好处是执行环境简单；坏处是一个耗时长的任务就会导致页面卡在这个地方，产生“假死”现象。 
    为了解决这个问题，js将执行模式分为同步(Synchronous)和异步(Asynchronous)。 
    总结js的异步编程大概经历了一下几个阶段：

ES6之前的异步编程



高阶函数]]></description><category></category></item><item><title><![CDATA[js函数柯里化]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/79229421</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/79229421</guid><author>sunshine215</author><pubDate>Thu, 01 Feb 2018 15:44:05 +0800</pubDate><description><![CDATA[函数柯里化定义

柯里化就是将多个参数的一个函数转换为使用部分参数传参的多个函数。感觉有点绕，换句话说，就是函数A需要传递多个参数来使用，经过柯里化处理后成为函数B，只需传递一个或者一部分参数给函数B，它会返回一个函数去处理剩下的参数。

举个简单的例子： 
- 开始的函数A



let fnA=function(x,y){
    return x+y
}
fnA(1,2) //3


转化为]]></description><category></category></item><item><title><![CDATA[HTTP协议详解]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/78445012</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/78445012</guid><author>sunshine215</author><pubDate>Sat, 04 Nov 2017 18:00:18 +0800</pubDate><description><![CDATA[原文链接：http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html


当今web程序的开发技术真是百家争鸣，ASP.NET, PHP, JSP，Perl, AJAX 等等。 无论Web技术在未来如何发展，理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细]]></description><category></category></item><item><title><![CDATA[react-router v4 使用 history 控制路由跳转]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/78296404</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/78296404</guid><author>sunshine215</author><pubDate>Fri, 20 Oct 2017 15:55:18 +0800</pubDate><description><![CDATA[问题当我们使用react-router v3的时候，我们想跳转路由，我们一般这样处理我们从react-router导出browserHistory。 
我们使用browserHistory.push()等等方法操作路由跳转。 
类似下面这样import browserHistory from 'react-router';export function addProduct(props) {
  r]]></description><category></category></item><item><title><![CDATA[null和undefined的区别]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/77868787</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/77868787</guid><author>sunshine215</author><pubDate>Wed, 06 Sep 2017 17:03:40 +0800</pubDate><description><![CDATA[null和undefined都表示无，两者既有相似性也有区别。两者比较相似性
它们都是基本数据，都具有不可变性，没有方法和属性；
不严格比较（null==undefined）的时候返回true；
区别
undefined代表根本不存在定义，而null被定义了，只是定义为空；
typeof null返回object，typeof undefined返回undefined；
Object.prototy]]></description><category></category></item><item><title><![CDATA[JS之闭包总结学习]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/77585024</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/77585024</guid><author>sunshine215</author><pubDate>Fri, 25 Aug 2017 18:25:43 +0800</pubDate><description><![CDATA[相关概念梳理
变量作用域：全局变量和局部变量 
全局变量：全局对象window下声明的变量或者顶层作用域下声明的变量； 
局部变量：函数内部声明的变量；
静态作用域和动态作用域 
静态作用域：函数的作用域在函数定义的时候就决定了（JavaScript 采用的是静态作用域）。 
动态作用域：函数的作用域在函数执行的时候才能决定。
闭包的定义官方给出的定义太学术化，较为难理解。这里采用多数人可理解的表达]]></description><category></category></item><item><title><![CDATA[CSS之图片水平垂直居中总结]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/77532824</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/77532824</guid><author>sunshine215</author><pubDate>Thu, 24 Aug 2017 17:18:14 +0800</pubDate><description><![CDATA[图片高宽固定1（利用盒子模型进行定位）
此方法受限于图片的高宽，必须为已知的。
html
<div class="box">
    <img src="./101.jpg" />
</div>
css样式
.box {
    border: 1px solid red;
    width: 200px;
    height: 200px;
    position: relative;
}.]]></description><category></category></item><item><title><![CDATA[数组元素为对象的数组去重]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/77480562</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/77480562</guid><author>sunshine215</author><pubDate>Tue, 22 Aug 2017 15:14:13 +0800</pubDate><description><![CDATA[当数组的对象为元素，或者我们想区分数字1和字符串‘1’的时候，一般的去重方法就有了一定的局限性。  function remove(data) {
    let obj = {};
    return data.filter(item => {
      item = JSON.stringify(item);
      let match = Boolean(obj[item]);]]></description><category></category></item><item><title><![CDATA[css样式换行整理]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/77198403</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/77198403</guid><author>sunshine215</author><pubDate>Tue, 15 Aug 2017 18:27:04 +0800</pubDate><description><![CDATA[css控制div等块级元素的换行一般的文字进行换行的时候，到达定义的宽度之后会自动换行（连续的英文字符和阿拉伯数字不会换行）。这是由于元素用默认属性：white-space：normal。
word-break:normal | break-all | keep-all- word-break：normal 
按照亚洲和非亚洲语言的文本规则，允许字内换行；
- word-break：break-al]]></description><category></category></item><item><title><![CDATA[把一个数组中的元素插入到另一个数组的指定位置]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/76691154</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/76691154</guid><author>sunshine215</author><pubDate>Fri, 04 Aug 2017 17:52:23 +0800</pubDate><description><![CDATA[把一个数组中的元素插入到另一个数组的指定位置 
var ary1 = [‘11’, ‘22’, ‘33’ , ‘44’]; 
var ary2 = [‘12’, ‘23’, ‘34’]; 
var num= 2; 
ary2.unshift(num, 0); 
Array.prototype.splice.apply(ary1, ary2); 
console.log(ary1);]]></description><category></category></item><item><title><![CDATA[数组中包含对象的去重方法]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/71747312</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/71747312</guid><author>sunshine215</author><pubDate>Fri, 12 May 2017 16:51:28 +0800</pubDate><description><![CDATA[… 
  let ary1 = [{age:1,name:2},{age:1,name:2},{age:2,name:5},{age:2,name:5}]; 
  let ary2 = []; 
  for(let val of ary1){ 
    if(!ary2.some(item=>item.age==val.age)){ 
      ary2.push(val) 
    } 
  }]]></description><category></category></item><item><title><![CDATA[JS中的模块规范   seajs和requireJS的异同]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/70212463</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/70212463</guid><author>sunshine215</author><pubDate>Mon, 17 Apr 2017 15:52:47 +0800</pubDate><description><![CDATA[浅析JS 中的模块规范  链接地址：http://www.cnblogs.com/skylar/p/4065455.html




SeaJS与RequireJS最大的区别  链接地址：https://www.douban.com/note/283566440/
seaJS和reaquireJS的异同   链接地址：https://github.com/seajs/seajs/iss]]></description><category></category></item><item><title><![CDATA[React.createClass 对决 extends React.Component]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/70175080</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/70175080</guid><author>sunshine215</author><pubDate>Fri, 14 Apr 2017 18:36:33 +0800</pubDate><description><![CDATA[React.createClass和extends React.Component解析]]></description><category></category></item><item><title><![CDATA[reacet-router跳转页面的方法总结]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/70174876</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/70174876</guid><author>sunshine215</author><pubDate>Fri, 14 Apr 2017 18:06:17 +0800</pubDate><description><![CDATA[react-router跳转页面]]></description><category></category></item><item><title><![CDATA[react-router实现单页面应用简析]]></title><link>https://blog.youkuaiyun.com/sunshine215/article/details/70145211</link><guid>https://blog.youkuaiyun.com/sunshine215/article/details/70145211</guid><author>sunshine215</author><pubDate>Wed, 12 Apr 2017 17:17:15 +0800</pubDate><description><![CDATA[react-router实现单页面应用简析

react-router通过Route标签的嵌套，实现点击切换为不同的路由。每个路由都有自己对应的component组件。那么点击切换路由，只是渲染不同的子组件，实质是利用了{this.props.children}。



export default class Index extends Component {
    render() {
  ...]]></description><category></category></item></channel></rss>