<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>IT老魁</title>
  
  <subtitle>王智魁</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://wangzhikui.com/"/>
  <updated>2020-06-12T07:05:45.405Z</updated>
  <id>http://wangzhikui.com/</id>
  
  <author>
    <name>IT老魁</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>任正非讲话全集pdf epub mobi</title>
    <link href="http://wangzhikui.com/2019/08/09/%E4%BB%BB%E6%AD%A3%E9%9D%9E%E8%AE%B2%E8%AF%9D%E5%85%A8%E9%9B%86/"/>
    <id>http://wangzhikui.com/2019/08/09/任正非讲话全集/</id>
    <published>2019-08-08T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.405Z</updated>
    
    <content type="html"><![CDATA[<h3 id="任正非讲话全集"><a href="#任正非讲话全集" class="headerlink" title="任正非讲话全集"></a>任正非讲话全集</h3><p><a href="/images/任正非讲话全集1994-2019.pdf">任正非讲话全集1994-2019.pdf</a>  </p><p><a href="/images/任正非讲话全集1994-2019.epub">任正非讲话全集1994-2019.epub</a></p><p><a href="/images/任正非讲话全集1994-2019.mobi">任正非讲话全集1994-2019.mobi</a></p><p><a href="/images/任正非媒体采访实录201901-201905.pdf">任正非媒体采访实录201901-201905.pdf</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;任正非讲话全集&quot;&gt;&lt;a href=&quot;#任正非讲话全集&quot; class=&quot;headerlink&quot; title=&quot;任正非讲话全集&quot;&gt;&lt;/a&gt;任正非讲话全集&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;/images/任正非讲话全集1994-2019.pdf&quot;&gt;任正非讲话全集1994
      
    
    </summary>
    
      <category term="笔记" scheme="http://wangzhikui.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="任正非讲话全集" scheme="http://wangzhikui.com/tags/%E4%BB%BB%E6%AD%A3%E9%9D%9E%E8%AE%B2%E8%AF%9D%E5%85%A8%E9%9B%86/"/>
    
      <category term="华为" scheme="http://wangzhikui.com/tags/%E5%8D%8E%E4%B8%BA/"/>
    
  </entry>
  
  <entry>
    <title>思维导图-华为-以客户为中心</title>
    <link href="http://wangzhikui.com/2019/08/09/%E5%AF%BC%E5%9B%BE-%E5%8D%8E%E4%B8%BA-%E4%BB%A5%E5%AE%A2%E6%88%B7%E4%B8%BA%E4%B8%AD%E5%BF%83/"/>
    <id>http://wangzhikui.com/2019/08/09/导图-华为-以客户为中心/</id>
    <published>2019-08-08T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.407Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一张图看完《以客户为中心》"><a href="#一张图看完《以客户为中心》" class="headerlink" title="一张图看完《以客户为中心》"></a>一张图看完《以客户为中心》</h1><p><img src="/images/以客户为中心.png" alt="以客户为中心"></p><p><a href="http://naotu.baidu.com/file/0445a902f0b752a33b8c1e2c9d58c940?token=1cee9bf64c41bcc0" target="_blank" rel="noopener">查看原文</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;一张图看完《以客户为中心》&quot;&gt;&lt;a href=&quot;#一张图看完《以客户为中心》&quot; class=&quot;headerlink&quot; title=&quot;一张图看完《以客户为中心》&quot;&gt;&lt;/a&gt;一张图看完《以客户为中心》&lt;/h1&gt;&lt;p&gt;&lt;img src=&quot;/images/以客户为中心.p
      
    
    </summary>
    
      <category term="笔记" scheme="http://wangzhikui.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://wangzhikui.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="华为" scheme="http://wangzhikui.com/tags/%E5%8D%8E%E4%B8%BA/"/>
    
      <category term="思维导图" scheme="http://wangzhikui.com/tags/%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-柯里化</title>
    <link href="http://wangzhikui.com/2019/01/29/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E6%9F%AF%E9%87%8C%E5%8C%96/"/>
    <id>http://wangzhikui.com/2019/01/29/javascript重塑基础系列之-柯里化/</id>
    <published>2019-01-28T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.395Z</updated>
    
    <content type="html"><![CDATA[<p>柯里化，即 Currying ，可以是函数变得更加灵活。我们可以一次性传入多个参数调用它；也可以只传入一部分参数来调用它，让它返回一个函数去处理剩下的参数。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> add = <span class="function"><span class="keyword">function</span>(<span class="params">x</span>)</span>&#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="function"><span class="keyword">function</span>(<span class="params">y</span>)</span>&#123;</span><br><span class="line">    <span class="keyword">return</span> x + y</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(add(<span class="number">1</span>)(<span class="number">2</span>))<span class="comment">//3</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> add1 = add(<span class="number">1</span>)</span><br><span class="line"><span class="built_in">console</span>.log(add1(<span class="number">1</span>))<span class="comment">//2</span></span><br></pre></td></tr></table></figure><p>代码中，我们可以一次性传入 1 个 2 作为参数 add(1)(2) ，也可以传入 1 个参数之后获取 add1 函数，这样使用起来非常灵活。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;柯里化，即 Currying ，可以是函数变得更加灵活。我们可以一次性传入多个参数调用它；也可以只传入一部分参数来调用它，让它返回一个函数去处理剩下的参数。&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td cl
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-变量提升</title>
    <link href="http://wangzhikui.com/2019/01/28/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E5%8F%98%E9%87%8F%E6%8F%90%E5%8D%87/"/>
    <id>http://wangzhikui.com/2019/01/28/javascript重塑基础系列之-变量提升/</id>
    <published>2019-01-27T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.394Z</updated>
    
    <content type="html"><![CDATA[<p>JavaScript 会将所有变量和函数声明移动到它的作用域的最前面，这就是所谓的变量提升 (Hoisting)  </p><p>。也就是说，无论你在什么地方声明变量和函数，解释器都会将它们移动到作用域的最前面。因此我们可以先使用变量和函数，而后声明它们。<br>但是，仅仅是变量声明被提升了，而变量赋值不会被提升。如果你不明白这一点，有时则会出错：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">console</span>.log(x)<span class="comment">//undefined</span></span><br><span class="line">x = <span class="number">2</span><span class="comment">//初始化x</span></span><br></pre></td></tr></table></figure><p>所谓模块化，就是根据需要控制模块内属性与方法的可访问性，即私有或者公开。</p><p>在代码中，</p><p>module 为一个独立的模块</p><p>name 为其私有属性</p><p>work 为其私有方法</p><p>age 为其公有属性</p><p>say 为共有方法</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;JavaScript 会将所有变量和函数声明移动到它的作用域的最前面，这就是所谓的变量提升 (Hoisting)  &lt;/p&gt;
&lt;p&gt;。也就是说，无论你在什么地方声明变量和函数，解释器都会将它们移动到作用域的最前面。因此我们可以先使用变量和函数，而后声明它们。&lt;br&gt;但是，仅
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-模块化</title>
    <link href="http://wangzhikui.com/2019/01/27/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E6%A8%A1%E5%9D%97%E5%8C%96/"/>
    <id>http://wangzhikui.com/2019/01/27/javascript重塑基础系列之-模块化/</id>
    <published>2019-01-26T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.395Z</updated>
    
    <content type="html"><![CDATA[<p>JavaScript 并非模块化编程语言，至少 ES6 落地之前都不是。然而对于一个复杂的 Web 应用，模块化编程是一个最基本的要求。这时，可以使用<strong>立即执行函数</strong> 来实现模块化。</p><p>正如很多 JS 库比如 jQuery 以及我们 Fundebug 都是这样实现的</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> <span class="built_in">module</span> = (<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="keyword">var</span> name = <span class="string">"allen"</span>;</span><br><span class="line">  <span class="function"><span class="keyword">function</span> <span class="title">work</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">"working"</span>)</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="function"><span class="keyword">function</span> <span class="title">say</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">"hello world Im allen"</span>)</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> &#123;</span><br><span class="line">    age: <span class="number">100</span>,</span><br><span class="line">    say: say</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)()</span><br><span class="line"><span class="built_in">console</span>.log(<span class="built_in">module</span>.age)<span class="comment">//100</span></span><br><span class="line"><span class="built_in">console</span>.log(<span class="built_in">module</span>.say())<span class="comment">//hello world Im allen</span></span><br></pre></td></tr></table></figure><p>所谓模块化，就是根据需要控制模块内属性与方法的可访问性，即私有或者公开。</p><p>在代码中，</p><p>module 为一个独立的模块</p><p>name 为其私有属性</p><p>work 为其私有方法</p><p>age 为其公有属性</p><p>say 为共有方法</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;JavaScript 并非模块化编程语言，至少 ES6 落地之前都不是。然而对于一个复杂的 Web 应用，模块化编程是一个最基本的要求。这时，可以使用&lt;strong&gt;立即执行函数&lt;/strong&gt; 来实现模块化。&lt;/p&gt;
&lt;p&gt;正如很多 JS 库比如 jQuery 以及我们
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-prototype属性</title>
    <link href="http://wangzhikui.com/2019/01/26/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-prototype%E5%B1%9E%E6%80%A7/"/>
    <id>http://wangzhikui.com/2019/01/26/javascript重塑基础系列之-prototype属性/</id>
    <published>2019-01-25T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.393Z</updated>
    
    <content type="html"><![CDATA[<p>每个 JavaScript 构造函数都有一个 prototype 属性，用于设置所有实例对象需要共享的属性和方法。prototype 属性不能列举。JavaScript 仅支持通过 prototype 属性进行继承属性和方法。到了ES6以后引入了class，使其和其他后端面向对象语言一样如java，c++等。但是运行时机制还是通过模拟状类来实现，即:基于函数</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">Square</span>(<span class="params">w,h</span>)</span>&#123;</span><br><span class="line">  <span class="keyword">this</span>.width = w</span><br><span class="line">  <span class="keyword">this</span>.height = h</span><br><span class="line">&#125;</span><br><span class="line">Square.prototype.getArea =  <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">this</span>.width * <span class="keyword">this</span>.height</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> s1 = <span class="keyword">new</span> Square(<span class="number">10</span>,<span class="number">20</span>)</span><br><span class="line"><span class="keyword">var</span> s2 = <span class="keyword">new</span> Square(<span class="number">30</span>,<span class="number">40</span>)</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(s1.getArea())<span class="comment">//200</span></span><br><span class="line"><span class="built_in">console</span>.log(s2.getArea())<span class="comment">//1200</span></span><br></pre></td></tr></table></figure><p>代码中，w 和 h 都是构造函数 Square 创建的对象实例，它们通过 prototype 继承了 getArea 方法。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;每个 JavaScript 构造函数都有一个 prototype 属性，用于设置所有实例对象需要共享的属性和方法。prototype 属性不能列举。JavaScript 仅支持通过 prototype 属性进行继承属性和方法。到了ES6以后引入了class，使其和其他后端面
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-立即执行函数</title>
    <link href="http://wangzhikui.com/2019/01/25/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E7%AB%8B%E5%8D%B3%E6%89%A7%E8%A1%8C%E5%87%BD%E6%95%B0/"/>
    <id>http://wangzhikui.com/2019/01/25/javascript重塑基础系列之-立即执行函数/</id>
    <published>2019-01-24T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.395Z</updated>
    
    <content type="html"><![CDATA[<p><strong>立即执行函数</strong>：Immediately Invoked Function Expression (IIFE)，创建函数的同时立即执行。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="built_in">console</span>.log(<span class="string">"hello world"</span>)</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure></p><p>function(){…}  是一个匿名函数，包围它的一对括号将其转换为一个表达式，紧跟其后的一对括号调用了这个函数。立即执行函数也可以理解为立即调用一个匿名函数。</p><p>立即执行函数最常见的应用场景就是：将 var 变量的作用域限制于函数内，这样可以避免命名冲突。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;strong&gt;立即执行函数&lt;/strong&gt;：Immediately Invoked Function Expression (IIFE)，创建函数的同时立即执行。&lt;br&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;t
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-闭包</title>
    <link href="http://wangzhikui.com/2019/01/25/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E9%97%AD%E5%8C%85/"/>
    <id>http://wangzhikui.com/2019/01/25/javascript重塑基础系列之-闭包/</id>
    <published>2019-01-24T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.395Z</updated>
    
    <content type="html"><![CDATA[<h1 id="闭包"><a href="#闭包" class="headerlink" title="闭包"></a><font color="green">闭包</font></h1><p><strong>闭包(closure)</strong>：当外部函数返回之后，内部函数依然可以访问外部函数的变量。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">f1</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="keyword">var</span> a = <span class="number">1</span>; <span class="comment">//a是f1的局部变量</span></span><br><span class="line">  <span class="function"><span class="keyword">function</span> <span class="title">f2</span>(<span class="params"></span>)</span>&#123;<span class="comment">//f2是函数f1的内部函数，是闭包</span></span><br><span class="line">    a = a+<span class="number">1</span>;<span class="comment">//内部函数使用了f1中的变量a</span></span><br><span class="line">    <span class="built_in">console</span>.log(a);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> f2;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">var</span> test = f1();</span><br><span class="line">test();<span class="comment">//2</span></span><br><span class="line">test();<span class="comment">//3</span></span><br></pre></td></tr></table></figure></p><p>代码中，外部函数 f1 只执行了一次，变量 a 设为 1 ，并将内部函数 f2 赋值给了变量 test 。由于外部函数 f1 已经执行完毕，其内部变量 a 应该在内存中被清除，然而事实并不是这样：我们每次调用 test 的时候，发现变量 a 一直在内存中，并且在累加。这就是闭包的神奇之处了！</p><h1 id="使用闭包定义私有变量"><a href="#使用闭包定义私有变量" class="headerlink" title="使用闭包定义私有变量"></a><font color="green">使用闭包定义私有变量</font></h1><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">people</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="keyword">var</span> name;</span><br><span class="line">  <span class="function"><span class="keyword">function</span> <span class="title">getName</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">    <span class="keyword">return</span> name;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="function"><span class="keyword">function</span> <span class="title">setName</span>(<span class="params">value</span>)</span>&#123;</span><br><span class="line">    name = value;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">var</span> person = <span class="keyword">new</span> people();</span><br><span class="line">person.setName(<span class="string">"张三"</span>);</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(person.name);<span class="comment">//undefined</span></span><br><span class="line"><span class="built_in">console</span>.log(person.getName());<span class="comment">//张三</span></span><br></pre></td></tr></table></figure><p>代码中，对象 person 的的 name 属性为私有属性，使用 person.name 不能直接访问。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;闭包&quot;&gt;&lt;a href=&quot;#闭包&quot; class=&quot;headerlink&quot; title=&quot;闭包&quot;&gt;&lt;/a&gt;&lt;font color=&quot;green&quot;&gt;闭包&lt;/font&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;闭包(closure)&lt;/strong&gt;：当外部函数返回之后，内部函数
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-拆箱&amp;装箱</title>
    <link href="http://wangzhikui.com/2019/01/24/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E6%8B%86%E7%AE%B1-%E8%A3%85%E7%AE%B1/"/>
    <id>http://wangzhikui.com/2019/01/24/javascript重塑基础系列之-拆箱-装箱/</id>
    <published>2019-01-23T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.394Z</updated>
    
    <content type="html"><![CDATA[<h1 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h1><ul><li><a href="#概述">概述</a></li><li><a href="#装箱">装箱</a></li><li><a href="#拆箱">拆箱</a></li><li><a href="#总结">总结</a></li></ul><h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a><font color="green">概述</font></h1><p><strong>装箱：</strong>把基本数据类型转换为对应的引用类型的操作</p><p><strong>拆箱：</strong>把引用类型转换为基本的数据类型</p><h1 id="装箱"><a href="#装箱" class="headerlink" title="装箱"></a><font color="green">装箱</font></h1><blockquote><p>每当读取一个基本类型的时候，后台就会创建一个对应的基本包装类型对象，从而让我们能够调用一些方法来操作这些数据</p></blockquote><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> str1 = <span class="string">"hello world"</span>;</span><br><span class="line"><span class="keyword">var</span> str2 = str1.substring(<span class="number">7</span>);</span><br><span class="line"><span class="string">`</span></span><br></pre></td></tr></table></figure><p>如上示例，str1是一个基本类型，js内部为我们做了装箱处理，使得它能使用方法.类似如下方式:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> str1 = <span class="keyword">new</span> <span class="built_in">String</span>(<span class="string">"hello world"</span>);</span><br><span class="line"><span class="keyword">var</span> str2 = str1.substring(<span class="number">7</span>);</span><br><span class="line">str1 = <span class="literal">null</span>;</span><br></pre></td></tr></table></figure><ul><li>创建 String 类型的实例</li><li>调用实例方法</li><li>销毁实例</li></ul><h1 id="拆箱"><a href="#拆箱" class="headerlink" title="拆箱"></a><font color="green">拆箱</font></h1><blockquote><p>将引用类型对象转换为对应的值类型对象，它是通过引用类型的valueOf()或者toString()方法来实现的。如果是自定义的对象，你也可以自定义它的valueOf()/tostring()方法，实现对这个对象的拆箱</p></blockquote><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//定义两个对象</span></span><br><span class="line"><span class="keyword">var</span> num = <span class="keyword">new</span> <span class="built_in">Number</span>(<span class="number">1314</span>);  </span><br><span class="line"><span class="keyword">var</span> str =<span class="keyword">new</span> <span class="built_in">String</span>(<span class="string">"1314"</span>);  </span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(num) <span class="comment">//1314</span></span><br><span class="line"><span class="built_in">console</span>.log(str) <span class="comment">//"1314"</span></span><br></pre></td></tr></table></figure><p>如上会自动调用valueOf()和toString实现拆箱</p><p><a href="https://codepen.io/anon/pen/RvEvxe?editors=0111" target="_blank" rel="noopener">试一下</a></p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a><font color="green">总结</font></h1><p>装箱&amp;拆箱逻辑并不复杂，但是要知道其中的原理，一旦涉及到底层api的时候才不会懵</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;目录&quot;&gt;&lt;a href=&quot;#目录&quot; class=&quot;headerlink&quot; title=&quot;目录&quot;&gt;&lt;/a&gt;目录&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#概述&quot;&gt;概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#装箱&quot;&gt;装箱&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a h
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-使用void 0 替换undefined</title>
    <link href="http://wangzhikui.com/2019/01/23/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-%E4%BD%BF%E7%94%A8void-0-%E6%9B%BF%E6%8D%A2undefined/"/>
    <id>http://wangzhikui.com/2019/01/23/javascript重塑基础系列之-使用void-0-替换undefined/</id>
    <published>2019-01-22T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.394Z</updated>
    
    <content type="html"><![CDATA[<h1 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h1><ul><li><a href="#概述">概述</a></li><li><a href="#不使用undefined原因">不使用undefined原因</a></li><li><a href="#使用void原因">使用void原因</a></li><li><a href="#其他一些替代写法">其他一些替代写法</a></li><li><a href="#reference">reference</a></li></ul><h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a><font color="green">概述</font></h1><p>undefined：表示未定义。</p><p>在编码中使用某一个变量或者函数之前有时会判断是否已经定义了，并且不是空然后再做处理。这个时候会使用比如：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span>(a !== <span class="literal">undefined</span> &amp;&amp; a! == <span class="literal">null</span>)&#123;</span><br><span class="line">  .......</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>一般来讲是没有问题的，但如果经常阅读开源源码会发现，如下写法：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span>(a !== <span class="keyword">void</span> <span class="number">0</span> &amp;&amp; a! == <span class="literal">null</span>)&#123;</span><br><span class="line">  .......</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>两种写法目的是一样的。</p><h1 id="不使用undefined原因"><a href="#不使用undefined原因" class="headerlink" title="不使用undefined原因"></a><font color="green">不使用undefined原因</font></h1><p>上面提到两种写法，为什么建议用void 0 ？</p><p>主要原因是javascript在设计的时候undefined并不是一个关键字，也就是说如下代码是合理的不会报错:<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> <span class="literal">undefined</span> = <span class="number">100</span>;</span><br><span class="line"><span class="built_in">console</span>.log(<span class="literal">undefined</span>)</span><br></pre></td></tr></table></figure></p><p>不同的浏览器运行的结果不太相同，在chrome中仍然输出undifined，但是在比较老的IE中会输出100；</p><p>ES5之后undefined已经是一个只读属性，所以上述输出不同浏览器基本都是undefined。但是在局部作用域中undefined会被修改：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">(<span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line">  <span class="keyword">var</span> <span class="literal">undefined</span> = <span class="number">100</span>;</span><br><span class="line">  <span class="built_in">console</span>.log(<span class="literal">undefined</span>);</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure></p><p>结果：输出100</p><p><a href="https://codepen.io/gaearon/pen/ZpvBNJ?editors=0111" target="_blank" rel="noopener">试一下</a></p><h1 id="使用void原因"><a href="#使用void原因" class="headerlink" title="使用void原因"></a><font color="green">使用void原因</font></h1><p>void是javascript中的一个操作符，有两种写法</p><ul><li>void exp</li><li>void(exp)</li></ul><p>void：计算一个表达式但无论该表达式原来是否有自己的返回值，其返回值都为undefined</p><ul><li>作用一：返回undefined，解决上面提到的undefined会被重新定义的问题</li><li>作用二：防止不必要的行为。比如a标签中我们有一种写法<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;a href=<span class="string">"javascript:void(0)"</span>&gt;<span class="xml"><span class="tag">&lt;/<span class="name">a</span>&gt;</span></span></span><br></pre></td></tr></table></figure></li></ul><p>因为void是关键字所以可以放心的用。为什么是void 0内，其实后面跟什么都会返回undefined，只是最简单的就是0这个字符，其实void 1，void 2，void(“hello”) 都可以。void 0可以做到占用字节数最少。</p><h1 id="其他一些替代写法"><a href="#其他一些替代写法" class="headerlink" title="其他一些替代写法"></a><font color="green">其他一些替代写法</font></h1><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//取整</span></span><br><span class="line"><span class="built_in">parseInt</span>(a,<span class="number">10</span>); <span class="comment">//Before</span></span><br><span class="line"><span class="built_in">Math</span>.floor(a); <span class="comment">//Before</span></span><br><span class="line">a&gt;&gt;<span class="number">0</span>; <span class="comment">//Before</span></span><br><span class="line">~~a; <span class="comment">//After</span></span><br><span class="line">a|<span class="number">0</span>; <span class="comment">//After</span></span><br><span class="line"> </span><br><span class="line"><span class="comment">//四舍五入</span></span><br><span class="line"><span class="built_in">Math</span>.round(a); <span class="comment">//Before</span></span><br><span class="line">a+<span class="number">.5</span>|<span class="number">0</span>; <span class="comment">//After</span></span><br><span class="line"> </span><br><span class="line"><span class="comment">//内置值</span></span><br><span class="line"><span class="literal">undefined</span>; <span class="comment">//Before</span></span><br><span class="line"><span class="keyword">void</span> <span class="number">0</span>; <span class="comment">//After, 快</span></span><br><span class="line"><span class="number">0</span>[<span class="number">0</span>]; <span class="comment">//After, 略慢</span></span><br><span class="line"> </span><br><span class="line"><span class="comment">//内置值</span></span><br><span class="line"><span class="literal">Infinity</span>;</span><br><span class="line"><span class="number">1</span>/<span class="number">0</span>;</span><br><span class="line"> </span><br><span class="line"><span class="comment">//布尔值短写法</span></span><br><span class="line"><span class="literal">true</span>; <span class="comment">//Before</span></span><br><span class="line">!<span class="number">0</span>; <span class="comment">//After</span></span><br><span class="line"> </span><br><span class="line"><span class="comment">//布尔值短写法</span></span><br><span class="line"><span class="literal">false</span>; <span class="comment">//Before</span></span><br><span class="line">!<span class="number">1</span>; <span class="comment">//After</span></span><br></pre></td></tr></table></figure><h1 id="reference"><a href="#reference" class="headerlink" title="reference"></a><font color="green">reference</font></h1><p><a href="https://blog.csdn.net/qq_33834489/article/details/81540018" target="_blank" rel="noopener">https://blog.csdn.net/qq_33834489/article/details/81540018</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;目录&quot;&gt;&lt;a href=&quot;#目录&quot; class=&quot;headerlink&quot; title=&quot;目录&quot;&gt;&lt;/a&gt;目录&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#概述&quot;&gt;概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#不使用undefined原因&quot;&gt;不使用undef
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>javascript重塑基础系列之-push()和concat()的区别</title>
    <link href="http://wangzhikui.com/2019/01/22/javascript%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%E4%B9%8B-push-%E5%92%8Cconcat-%E7%9A%84%E5%8C%BA%E5%88%AB/"/>
    <id>http://wangzhikui.com/2019/01/22/javascript重塑基础系列之-push-和concat-的区别/</id>
    <published>2019-01-21T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.394Z</updated>
    
    <content type="html"><![CDATA[<h1 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h1><ul><li><a href="#区别">区别</a></li><li><a href="#示例1-往数组添加元素">示例1-往数组添加元素</a></li><li><a href="#示例2-往数组中添加数组">示例2-往数组中添加数组</a></li><li><a href="#效率">效率</a></li></ul><h1 id="区别"><a href="#区别" class="headerlink" title="区别"></a><font color="green">区别</font></h1><p>功能：往数组末尾追加数据</p><p>push</p><ul><li>会改变原有数组</li><li>如果添加一个数组，会把数组作为对象追加到末尾</li><li>如果添加一个数组并要解析，需要使用arr.push.apply()orArray.prototype.push.apply()</li></ul><p>concat</p><ul><li>不会改变原有数组，而是返回追加数据后的数组的副本，原有数组不变</li><li>如果添加一个数组，会把数组解析成元素逐个追加到末尾</li></ul><h1 id="示例1-往数组添加元素"><a href="#示例1-往数组添加元素" class="headerlink" title="示例1-往数组添加元素"></a><font color="green">示例1-往数组添加元素</font></h1><h2 id="push"><a href="#push" class="headerlink" title="push"></a>push</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> arr_src = <span class="keyword">new</span> <span class="built_in">Array</span>()</span><br><span class="line">arr_src[<span class="number">0</span>] = <span class="number">1</span></span><br><span class="line">arr_src[<span class="number">1</span>] = <span class="number">2</span></span><br><span class="line">arr_src[<span class="number">2</span>] = <span class="number">3</span></span><br><span class="line">arr_src[<span class="number">3</span>] = <span class="number">4</span></span><br><span class="line"><span class="built_in">console</span>.log(arr_src) <span class="comment">//输出 [1,2,3,4]</span></span><br><span class="line"><span class="keyword">var</span> result = arr_src.push(<span class="number">5</span>)</span><br><span class="line"><span class="built_in">console</span>.log(arr_src)  <span class="comment">//输出[1,2,3,4,5]</span></span><br><span class="line"><span class="built_in">console</span>.log(result)   <span class="comment">//输出5   即返回数组长度</span></span><br></pre></td></tr></table></figure><p><a href="https://codepen.io/anon/pen/MLWGZP?editors=0011" target="_blank" rel="noopener">运行结果</a></p><h2 id="concat"><a href="#concat" class="headerlink" title="concat"></a>concat</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> arr_src = <span class="keyword">new</span> <span class="built_in">Array</span>()</span><br><span class="line">arr_src[<span class="number">0</span>] = <span class="number">1</span></span><br><span class="line">arr_src[<span class="number">1</span>] = <span class="number">2</span></span><br><span class="line">arr_src[<span class="number">2</span>] = <span class="number">3</span></span><br><span class="line">arr_src[<span class="number">3</span>] = <span class="number">4</span></span><br><span class="line"><span class="built_in">console</span>.log(arr_src) <span class="comment">//输出 [1,2,3,4]</span></span><br><span class="line"><span class="keyword">var</span> result = arr_src.concat(<span class="number">5</span>)</span><br><span class="line"><span class="built_in">console</span>.log(arr_src)  <span class="comment">//输出[1,2,3,4]</span></span><br><span class="line"><span class="built_in">console</span>.log(result)   <span class="comment">//返回合并后的数组 输出[1,2,3,4,5]</span></span><br></pre></td></tr></table></figure><p><a href="https://codepen.io/anon/pen/zeYjEy?editors=0011" target="_blank" rel="noopener">运行结果</a></p><h1 id="示例2-往数组中添加数组"><a href="#示例2-往数组中添加数组" class="headerlink" title="示例2-往数组中添加数组"></a><font color="green">示例2-往数组中添加数组</font></h1><h2 id="push-1"><a href="#push-1" class="headerlink" title="push"></a>push</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> arr_src = <span class="keyword">new</span> <span class="built_in">Array</span>()</span><br><span class="line">arr_src[<span class="number">0</span>] = <span class="number">1</span></span><br><span class="line">arr_src[<span class="number">1</span>] = <span class="number">2</span></span><br><span class="line">arr_src[<span class="number">2</span>] = <span class="number">3</span></span><br><span class="line">arr_src[<span class="number">3</span>] = <span class="number">4</span></span><br><span class="line"><span class="keyword">var</span> arr_add = <span class="keyword">new</span> <span class="built_in">Array</span>()</span><br><span class="line">arr_add[<span class="number">0</span>] = <span class="number">5</span></span><br><span class="line">arr_add[<span class="number">1</span>] = <span class="number">6</span></span><br><span class="line"><span class="built_in">console</span>.log(arr_src) <span class="comment">//输出 [1,2,3,4]</span></span><br><span class="line"><span class="built_in">console</span>.log(arr_add) <span class="comment">//输出 [5,6]</span></span><br><span class="line">arr_src.push(arr_add)</span><br><span class="line"><span class="built_in">console</span>.log(arr_src)  <span class="comment">//输出[1,2,3,4,[5,6&#125;]</span></span><br><span class="line"><span class="built_in">console</span>.log(arr_add)  <span class="comment">//输出[5,6]</span></span><br></pre></td></tr></table></figure><p><a href="https://codepen.io/anon/pen/jdOzRy?editors=0012" target="_blank" rel="noopener">运行结果</a></p><p>如果要解析数组逐个追加可以使用apply,如下两种方法均可,arr_src数组会被改变，arr_add不变<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">arr_src.push.apply(arr_src,arr_add)        <span class="comment">//[1, 2, 3, 4, 5,6]</span></span><br><span class="line"><span class="comment">//或者</span></span><br><span class="line"><span class="built_in">Array</span>.prototype.push.apply(arr_scr,arr_add)</span><br></pre></td></tr></table></figure></p><p><a href="https://codepen.io/anon/pen/jdOzRy?editors=0012" target="_blank" rel="noopener">尝试一下</a></p><h2 id="concat-1"><a href="#concat-1" class="headerlink" title="concat"></a>concat</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> arr_src = <span class="keyword">new</span> <span class="built_in">Array</span>()</span><br><span class="line">arr_src[<span class="number">0</span>] = <span class="number">1</span></span><br><span class="line">arr_src[<span class="number">1</span>] = <span class="number">2</span></span><br><span class="line">arr_src[<span class="number">2</span>] = <span class="number">3</span></span><br><span class="line">arr_src[<span class="number">3</span>] = <span class="number">4</span></span><br><span class="line"><span class="built_in">console</span>.log(arr_src) <span class="comment">//输出 [1,2,3,4]</span></span><br><span class="line"><span class="keyword">var</span> result = arr_src.concat([<span class="number">5</span>,<span class="number">6</span>])</span><br><span class="line"><span class="built_in">console</span>.log(arr_src)  <span class="comment">//输出[1,2,3,4]</span></span><br><span class="line"><span class="built_in">console</span>.log(result)   <span class="comment">//输出[1,2,3,4,5,6]</span></span><br></pre></td></tr></table></figure><p><a href="https://codepen.io/anon/pen/pGoVGZ?editors=0011" target="_blank" rel="noopener">运行结果</a></p><h1 id="效率"><a href="#效率" class="headerlink" title="效率"></a><font color="green">效率</font></h1><h2 id="测试环境"><a href="#测试环境" class="headerlink" title="测试环境"></a>测试环境</h2><ul><li>两个10万的数组合并</li><li>chrome浏览器 Version 71.0.3578.98 (Official Build) (64-bit)</li></ul><h2 id="测试结果"><a href="#测试结果" class="headerlink" title="测试结果"></a>测试结果</h2><ul><li>concat优与apply</li><li>concat没有长度限制，apply在chrome浏览器下20万-30万之间就内存溢出，实际边界没有测试，不同浏览器不同</li></ul><h2 id="测试代码如下：保存为html用浏览器打开即可"><a href="#测试代码如下：保存为html用浏览器打开即可" class="headerlink" title="测试代码如下：保存为html用浏览器打开即可"></a>测试代码如下：保存为html用浏览器打开即可</h2><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="javascript"><span class="keyword">var</span> testArray1=[]</span></span><br><span class="line"><span class="javascript"><span class="keyword">var</span> testArray2=[]</span></span><br><span class="line"><span class="javascript"><span class="function"><span class="keyword">function</span> <span class="title">reset</span>(<span class="params"></span>)</span>&#123;</span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> count = <span class="built_in">document</span>.getElementById(<span class="string">"count"</span>).value</span></span><br><span class="line"><span class="javascript">  <span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>; i&lt;count;i++)&#123;</span></span><br><span class="line"><span class="undefined">    testArray1.push(i)</span></span><br><span class="line"><span class="undefined">    testArray2.push(i+count)</span></span><br><span class="line"><span class="undefined">  &#125;</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="javascript"><span class="function"><span class="keyword">function</span> <span class="title">setValue</span>(<span class="params">id,value</span>)</span>&#123;</span></span><br><span class="line"><span class="javascript">  <span class="built_in">document</span>.getElementById(id).innerHTML = value</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="javascript"><span class="function"><span class="keyword">function</span> <span class="title">testApply</span>(<span class="params"></span>)</span>&#123;</span></span><br><span class="line"><span class="javascript">  <span class="comment">//初始化数组</span></span></span><br><span class="line"><span class="undefined">  reset()</span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> startTime=<span class="number">0</span></span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> endTime=<span class="number">0</span></span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(<span class="string">'开始：'</span>+ (startTime=<span class="keyword">new</span> <span class="built_in">Date</span>().getTime()))</span></span><br><span class="line"><span class="javascript">  setValue(<span class="string">"startTime"</span>,startTime)</span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> result=<span class="built_in">Array</span>.prototype.push.apply(testArray1,testArray2) <span class="comment">// result为合并后的数组长度</span></span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(result)</span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(<span class="string">'结束：'</span>+ (endTime=<span class="keyword">new</span> <span class="built_in">Date</span>().getTime()))</span></span><br><span class="line"><span class="javascript">  setValue(<span class="string">"endTime"</span>,endTime)</span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(<span class="string">'耗时：'</span>+(endTime-startTime))</span></span><br><span class="line"><span class="javascript">  setValue(<span class="string">"totalTime"</span>,endTime-startTime)</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="javascript"><span class="function"><span class="keyword">function</span> <span class="title">testConcat</span>(<span class="params"></span>)</span>&#123;</span></span><br><span class="line"><span class="javascript">  <span class="comment">//初始化数组</span></span></span><br><span class="line"><span class="undefined">  reset()</span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> startTime=<span class="number">0</span></span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> endTime=<span class="number">0</span></span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(<span class="string">'开始：'</span>+ (startTime=<span class="keyword">new</span> <span class="built_in">Date</span>().getTime()))</span></span><br><span class="line"><span class="javascript">  setValue(<span class="string">"startTime"</span>,startTime)</span></span><br><span class="line"><span class="javascript">  <span class="keyword">var</span> result=testArray1.concat(testArray2) <span class="comment">//result为合并后的数组</span></span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(result.length)</span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(<span class="string">'结束：'</span>+ (endTime=<span class="keyword">new</span> <span class="built_in">Date</span>().getTime()))</span></span><br><span class="line"><span class="javascript">  setValue(<span class="string">"endTime"</span>,endTime)</span></span><br><span class="line"><span class="javascript">  <span class="built_in">console</span>.log(<span class="string">'耗时：'</span>+(endTime-startTime))</span></span><br><span class="line"><span class="javascript">  setValue(<span class="string">"totalTime"</span>,endTime-startTime)</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">id</span>=<span class="string">"count"</span> /&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> <span class="attr">onclick</span>=<span class="string">"testApply()"</span>&gt;</span>testApply<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> <span class="attr">onclick</span>=<span class="string">"testConcat()"</span>&gt;</span>testConcat<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">br</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">li</span>&gt;</span>开始:<span class="tag">&lt;<span class="name">div</span> <span class="attr">id</span>=<span class="string">"startTime"</span>&gt;</span><span class="tag">&lt;/<span class="name">div</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">li</span>&gt;</span>结束:<span class="tag">&lt;<span class="name">div</span> <span class="attr">id</span>=<span class="string">"endTime"</span>&gt;</span><span class="tag">&lt;/<span class="name">div</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">li</span>&gt;</span>耗时:<span class="tag">&lt;<span class="name">div</span> <span class="attr">id</span>=<span class="string">"totalTime"</span>&gt;</span><span class="tag">&lt;/<span class="name">div</span>&gt;</span>毫秒<span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>效果图：</p><p><img src="/images/javascript重塑/1.png" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;目录&quot;&gt;&lt;a href=&quot;#目录&quot; class=&quot;headerlink&quot; title=&quot;目录&quot;&gt;&lt;/a&gt;目录&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#区别&quot;&gt;区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#示例1-往数组添加元素&quot;&gt;示例1-往数组添加元素
      
    
    </summary>
    
      <category term="javascript" scheme="http://wangzhikui.com/categories/javascript/"/>
    
    
      <category term="javascript" scheme="http://wangzhikui.com/tags/javascript/"/>
    
      <category term="重塑基础" scheme="http://wangzhikui.com/tags/%E9%87%8D%E5%A1%91%E5%9F%BA%E7%A1%80/"/>
    
  </entry>
  
  <entry>
    <title>Tree-shaking（待）</title>
    <link href="http://wangzhikui.com/2019/01/19/%EF%BC%88%E5%BE%85%EF%BC%89treeshaking/"/>
    <id>http://wangzhikui.com/2019/01/19/（待）treeshaking/</id>
    <published>2019-01-18T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.411Z</updated>
    
    <content type="html"><![CDATA[<p>Tree-shaking（待）<br><a href="https://juejin.im/post/5a4dc842518825698e7279a9" target="_blank" rel="noopener">https://juejin.im/post/5a4dc842518825698e7279a9</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;Tree-shaking（待）&lt;br&gt;&lt;a href=&quot;https://juejin.im/post/5a4dc842518825698e7279a9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://juejin.im/post/5a4dc8
      
    
    </summary>
    
      <category term="web前端" scheme="http://wangzhikui.com/categories/web%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="web前端" scheme="http://wangzhikui.com/tags/web%E5%89%8D%E7%AB%AF/"/>
    
  </entry>
  
  <entry>
    <title>如何选择开源协议</title>
    <link href="http://wangzhikui.com/2019/01/17/%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE/"/>
    <id>http://wangzhikui.com/2019/01/17/如何选择开源协议/</id>
    <published>2019-01-16T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.406Z</updated>
    
    <content type="html"><![CDATA[<h1 id="如何为代码选择开源许可证，这是一个问题"><a href="#如何为代码选择开源许可证，这是一个问题" class="headerlink" title="如何为代码选择开源许可证，这是一个问题"></a><font color="green">如何为代码选择开源许可证，这是一个问题</font></h1><p>世界上的开源许可证，大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种</p><p><a href="http://www.gnu.org/licenses/gpl.html" target="_blank" rel="noopener">GPL</a><br><a href="http://en.wikipedia.org/wiki/BSD_licenses" target="_blank" rel="noopener">BSD</a><br><a href="http://en.wikipedia.org/wiki/MIT_License" target="_blank" rel="noopener">MIT</a><br><a href="http://www.mozilla.org/MPL/" target="_blank" rel="noopener">Mozilla</a><br><a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener">Apache</a><br><a href="http://www.gnu.org/copyleft/lesser.html" target="_blank" rel="noopener">LGPL</a></p><p>之中做选择，也很复杂。</p><p>乌克兰程序员Paul Bagwell，画了一张分析图</p><p>阮一峰对该图做了翻译</p><p>以下也收集了网上几张经典的开源协议图</p><h1 id="开源协议英文版-Paul-Bagwell"><a href="#开源协议英文版-Paul-Bagwell" class="headerlink" title="开源协议英文版-Paul Bagwell"></a><font color="green">开源协议英文版-Paul Bagwell</font></h1><p><img src="/images/开源协议英文.png" alt=""></p><h1 id="开源协议中文版-阮一峰翻译版"><a href="#开源协议中文版-阮一峰翻译版" class="headerlink" title="开源协议中文版-阮一峰翻译版"></a><font color="green">开源协议中文版-阮一峰翻译版</font></h1><p><img src="/images/开源协议中文.png" alt=""></p><h1 id="开源协议中文版-网络"><a href="#开源协议中文版-网络" class="headerlink" title="开源协议中文版-网络"></a><font color="green">开源协议中文版-网络</font></h1><p><img src="/images/开源协议中文1.png" alt=""></p><h1 id="开源协议英文版-网络"><a href="#开源协议英文版-网络" class="headerlink" title="开源协议英文版-网络"></a><font color="green">开源协议英文版-网络</font></h1><p><img src="/images/开源协议英文1.png" alt=""></p><h1 id="reference"><a href="#reference" class="headerlink" title="reference"></a><font color="green">reference</font></h1><p><a href="http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html" target="_blank" rel="noopener">http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;如何为代码选择开源许可证，这是一个问题&quot;&gt;&lt;a href=&quot;#如何为代码选择开源许可证，这是一个问题&quot; class=&quot;headerlink&quot; title=&quot;如何为代码选择开源许可证，这是一个问题&quot;&gt;&lt;/a&gt;&lt;font color=&quot;green&quot;&gt;如何为代码选择开源
      
    
    </summary>
    
      <category term="笔记" scheme="http://wangzhikui.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://wangzhikui.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="开源" scheme="http://wangzhikui.com/tags/%E5%BC%80%E6%BA%90/"/>
    
  </entry>
  
  <entry>
    <title>shadow dom（待）</title>
    <link href="http://wangzhikui.com/2019/01/17/%EF%BC%88%E5%BE%85%EF%BC%89shadowdom/"/>
    <id>http://wangzhikui.com/2019/01/17/（待）shadowdom/</id>
    <published>2019-01-16T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.410Z</updated>
    
    <content type="html"><![CDATA[<p>shadow dom</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;shadow dom&lt;/p&gt;

      
    
    </summary>
    
      <category term="web前端" scheme="http://wangzhikui.com/categories/web%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="web前端" scheme="http://wangzhikui.com/tags/web%E5%89%8D%E7%AB%AF/"/>
    
  </entry>
  
  <entry>
    <title>阅读分享2019-01-17（六篇）</title>
    <link href="http://wangzhikui.com/2019/01/17/%E9%98%85%E8%AF%BB%E5%88%86%E4%BA%AB2/"/>
    <id>http://wangzhikui.com/2019/01/17/阅读分享2/</id>
    <published>2019-01-16T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.410Z</updated>
    
    <content type="html"><![CDATA[<h2 id="从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理"><a href="#从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理" class="headerlink" title="从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理"></a><a href="https://segmentfault.com/a/1190000012925872#articleHeader15" target="_blank" rel="noopener">从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理</a></h2><h2 id="待-2019-年值得学习的顶级-JavaScript-框架与主题"><a href="#待-2019-年值得学习的顶级-JavaScript-框架与主题" class="headerlink" title="(待)2019 年值得学习的顶级 JavaScript 框架与主题"></a>(待)<a href="https://juejin.im/post/5c3cbb91e51d4550932771ce" target="_blank" rel="noopener">2019 年值得学习的顶级 JavaScript 框架与主题</a></h2><h2 id="待-从输入URL到页面加载的过程？如何由一道题完善自己的前端知识体系！"><a href="#待-从输入URL到页面加载的过程？如何由一道题完善自己的前端知识体系！" class="headerlink" title="(待)从输入URL到页面加载的过程？如何由一道题完善自己的前端知识体系！"></a>(待)<a href="http://www.dailichun.com/2018/03/12/whenyouenteraurl.html" target="_blank" rel="noopener">从输入URL到页面加载的过程？如何由一道题完善自己的前端知识体系！</a></h2><h2 id="待-Tasks-microtasks-queues-and-schedules"><a href="#待-Tasks-microtasks-queues-and-schedules" class="headerlink" title="(待)Tasks, microtasks, queues and schedules"></a>(待)<a href="https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/" target="_blank" rel="noopener">Tasks, microtasks, queues and schedules</a></h2><h2 id="2018年JavaScript生态圈调查报告出炉！"><a href="#2018年JavaScript生态圈调查报告出炉！" class="headerlink" title="2018年JavaScript生态圈调查报告出炉！"></a><a href="https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&amp;mid=2247489926&amp;idx=1&amp;sn=85d30069ef6bc315f36685569dc7445d&amp;chksm=f951acc5ce2625d3eddaddb170a42610dfc9b340965b00d2bd2008593c7124720803d250300a&amp;mpshare=1&amp;scene=1&amp;srcid=0115pfPYRwcMqUWPaHlSSW7o#rd" target="_blank" rel="noopener">2018年JavaScript生态圈调查报告出炉！</a></h2><h2 id="GitHub年度盘点：Deno赶超Node，跃升第四！"><a href="#GitHub年度盘点：Deno赶超Node，跃升第四！" class="headerlink" title="GitHub年度盘点：Deno赶超Node，跃升第四！"></a><a href="https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&amp;mid=2247490270&amp;idx=1&amp;sn=59e786008d6bba785c37dd355006e887&amp;chksm=f951af9dce26268bcffff0b936d2a9a1bc0fe990cb6ee6e3792d2ae80c1f51d89a2c9b93d1d2&amp;mpshare=1&amp;scene=1&amp;srcid=0115xmCvY2UT8sYW6ckgAYav#rd" target="_blank" rel="noopener">GitHub年度盘点：Deno赶超Node，跃升第四！</a></h2>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理&quot;&gt;&lt;a href=&quot;#从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理&quot; class=&quot;headerlink&quot; title=&quot;从浏览器多进程到JS单线程，JS运行机制最全面的一次梳理&quot;&gt;&lt;/a&gt;&lt;a
      
    
    </summary>
    
      <category term="阅读分享" scheme="http://wangzhikui.com/categories/%E9%98%85%E8%AF%BB%E5%88%86%E4%BA%AB/"/>
    
    
      <category term="阅读分享" scheme="http://wangzhikui.com/tags/%E9%98%85%E8%AF%BB%E5%88%86%E4%BA%AB/"/>
    
  </entry>
  
  <entry>
    <title>mac中连接mysql常见错误</title>
    <link href="http://wangzhikui.com/2019/01/16/mac%E4%B8%AD%E8%BF%9E%E6%8E%A5mysql%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF/"/>
    <id>http://wangzhikui.com/2019/01/16/mac中连接mysql常见错误/</id>
    <published>2019-01-15T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.397Z</updated>
    
    <content type="html"><![CDATA[<h1 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a><font color="green">问题描述</font></h1><h2 id="Navicat连接本地数据库报错"><a href="#Navicat连接本地数据库报错" class="headerlink" title="Navicat连接本地数据库报错"></a><font color="green">Navicat连接本地数据库报错</font></h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">navicat for mysql[Mac]解决Can&apos;t connect to MySQL server on &apos;127.0.0.1&apos;(61 &quot;Connection refused&quot;)</span><br></pre></td></tr></table></figure><p><img src="/images/mysql1.png" alt=""></p><h1 id="处理过程"><a href="#处理过程" class="headerlink" title="处理过程"></a><font color="green">处理过程</font></h1><p>网上找了很多方法都没有解决，应该是场景不一样。</p><h2 id="步骤一：查看mysql服务是否启动（发现没有启动）"><a href="#步骤一：查看mysql服务是否启动（发现没有启动）" class="headerlink" title="步骤一：查看mysql服务是否启动（发现没有启动）"></a>步骤一：查看mysql服务是否启动（发现没有启动）</h2><h2 id="步骤二：启动mysql服务（启动报错）"><a href="#步骤二：启动mysql服务（启动报错）" class="headerlink" title="步骤二：启动mysql服务（启动报错）"></a>步骤二：启动mysql服务（启动报错）</h2><p>执行命令<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo /usr/local/mysql/support-files/mysql.server start</span><br></pre></td></tr></table></figure></p><p>启动过程报错<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ERROR! The server quit without updating PID file (/usr/local/mysql/data/bogon.pid).</span><br></pre></td></tr></table></figure></p><h2 id="步骤三：处理启动mysql服务报错问题"><a href="#步骤三：处理启动mysql服务报错问题" class="headerlink" title="步骤三：处理启动mysql服务报错问题"></a>步骤三：处理启动mysql服务报错问题</h2><p>同样的网上找了很多问题也没发现原因，无意间点开mac上的mysql控制面板<br><img src="/images/mysql2.png" alt=""><br>看到一条很有用的信息<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">“Warning:The /usr/local/mysql/data directory is not owned by the &apos;mysql&apos; or &apos;_mysql&apos; ”</span><br></pre></td></tr></table></figure></p><p>修改权限<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo chown -R mysql /usr/local/mysql/data</span><br><span class="line">sudo /usr/local/mysql/support-files/mysql.server start</span><br></pre></td></tr></table></figure></p><p>启动正常</p><h2 id="步骤四：再次使用Navicat连接（成功）"><a href="#步骤四：再次使用Navicat连接（成功）" class="headerlink" title="步骤四：再次使用Navicat连接（成功）"></a>步骤四：再次使用Navicat连接（成功）</h2><h1 id="补充"><a href="#补充" class="headerlink" title="补充"></a><font color="green">补充</font></h1><p>停止MySQL服务<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo /usr/local/mysql/support-files/mysql.server stop</span><br></pre></td></tr></table></figure></p><p>重启MySQL服务<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo /usr/local/mysql/support-files/mysql.server restart</span><br></pre></td></tr></table></figure></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;问题描述&quot;&gt;&lt;a href=&quot;#问题描述&quot; class=&quot;headerlink&quot; title=&quot;问题描述&quot;&gt;&lt;/a&gt;&lt;font color=&quot;green&quot;&gt;问题描述&lt;/font&gt;&lt;/h1&gt;&lt;h2 id=&quot;Navicat连接本地数据库报错&quot;&gt;&lt;a href=&quot;#Na
      
    
    </summary>
    
      <category term="mysql" scheme="http://wangzhikui.com/categories/mysql/"/>
    
    
      <category term="mac" scheme="http://wangzhikui.com/tags/mac/"/>
    
      <category term="mysql" scheme="http://wangzhikui.com/tags/mysql/"/>
    
  </entry>
  
  <entry>
    <title>sql语句：将结果中的数字转为汉字使用case语句</title>
    <link href="http://wangzhikui.com/2019/01/16/sql%E8%AF%AD%E5%8F%A5%E5%B0%86%E7%BB%93%E6%9E%9C%E4%B8%AD%E7%9A%84%E6%95%B0%E5%AD%97%E8%BD%AC%E4%B8%BA%E6%B1%89%E5%AD%97%E4%BD%BF%E7%94%A8case%E8%AF%AD%E5%8F%A5/"/>
    <id>http://wangzhikui.com/2019/01/16/sql语句将结果中的数字转为汉字使用case语句/</id>
    <published>2019-01-15T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.399Z</updated>
    
    <content type="html"><![CDATA[<h1 id="case语句"><a href="#case语句" class="headerlink" title="case语句"></a><font color="green">case语句</font></h1><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span></span><br><span class="line">st.<span class="string">`name`</span> <span class="keyword">AS</span> 名称 ,</span><br><span class="line">st.email <span class="keyword">AS</span> 申请人邮箱 ,</span><br><span class="line">st.phone <span class="keyword">AS</span> 申请人电话 ,</span><br><span class="line">(</span><br><span class="line"><span class="keyword">CASE</span> st.<span class="string">`status`</span></span><br><span class="line"><span class="keyword">WHEN</span> <span class="number">0</span> <span class="keyword">THEN</span></span><br><span class="line"><span class="string">'未审核'</span></span><br><span class="line"><span class="keyword">WHEN</span> <span class="number">1</span> <span class="keyword">THEN</span></span><br><span class="line"><span class="string">'试用'</span></span><br><span class="line"><span class="keyword">WHEN</span> <span class="number">2</span> <span class="keyword">THEN</span></span><br><span class="line"><span class="string">'开通'</span></span><br><span class="line"><span class="keyword">WHEN</span> <span class="number">8</span> <span class="keyword">THEN</span></span><br><span class="line"><span class="string">'驳回'</span></span><br><span class="line"><span class="keyword">WHEN</span> <span class="number">9</span> <span class="keyword">THEN</span></span><br><span class="line"><span class="string">'停用'</span></span><br><span class="line"><span class="keyword">ELSE</span></span><br><span class="line"><span class="string">'null'</span></span><br><span class="line"><span class="keyword">END</span></span><br><span class="line">) 状态</span><br><span class="line"><span class="keyword">FROM</span></span><br><span class="line">s_table st</span><br><span class="line"><span class="keyword">WHERE</span></span><br><span class="line">dr = <span class="number">0</span></span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;case语句&quot;&gt;&lt;a href=&quot;#case语句&quot; class=&quot;headerlink&quot; title=&quot;case语句&quot;&gt;&lt;/a&gt;&lt;font color=&quot;green&quot;&gt;case语句&lt;/font&gt;&lt;/h1&gt;&lt;figure class=&quot;highlight sql&quot;&gt;
      
    
    </summary>
    
      <category term="笔记" scheme="http://wangzhikui.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://wangzhikui.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="sql" scheme="http://wangzhikui.com/tags/sql/"/>
    
  </entry>
  
  <entry>
    <title>重学前端购买邀请</title>
    <link href="http://wangzhikui.com/2019/01/16/%E9%87%8D%E5%AD%A6%E5%89%8D%E7%AB%AF%E8%B4%AD%E4%B9%B0%E9%82%80%E8%AF%B7/"/>
    <id>http://wangzhikui.com/2019/01/16/重学前端购买邀请/</id>
    <published>2019-01-15T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.410Z</updated>
    
    <content type="html"><![CDATA[<p>最近朋友圈被重学前端刷屏了，试着看了一下，如果想系统的学习和巩固一下基础，确实是不错的选择，很多知识点不系统学习真不知道。</p><p>与学习框架相比，这些基础知识保值率更高，框架更新更替很快，但是基础知识不会，尤其是一些思想，设计模型等。</p><p>可以通过本人购买后分享的二维码购买，这样有回馈，也可以直接去极客app内购买</p><p><img src="/images/重学前端.png" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;最近朋友圈被重学前端刷屏了，试着看了一下，如果想系统的学习和巩固一下基础，确实是不错的选择，很多知识点不系统学习真不知道。&lt;/p&gt;
&lt;p&gt;与学习框架相比，这些基础知识保值率更高，框架更新更替很快，但是基础知识不会，尤其是一些思想，设计模型等。&lt;/p&gt;
&lt;p&gt;可以通过本人购买
      
    
    </summary>
    
      <category term="阅读分享" scheme="http://wangzhikui.com/categories/%E9%98%85%E8%AF%BB%E5%88%86%E4%BA%AB/"/>
    
    
      <category term="阅读分享" scheme="http://wangzhikui.com/tags/%E9%98%85%E8%AF%BB%E5%88%86%E4%BA%AB/"/>
    
  </entry>
  
  <entry>
    <title>前端开发：同构直出</title>
    <link href="http://wangzhikui.com/2019/01/15/%E5%90%8C%E6%9E%84%E7%9B%B4%E5%87%BA/"/>
    <id>http://wangzhikui.com/2019/01/15/同构直出/</id>
    <published>2019-01-14T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.406Z</updated>
    
    <content type="html"><![CDATA[<h1 id="直出"><a href="#直出" class="headerlink" title="直出"></a><font color="green">直出</font></h1><p>后端或者说服务端渲染页面并输出</p><p>直白的说在服务端获取页面需要的数据根据模板生成html页面并输出。现在服务端渲染通常使用nodejs处理。</p><p>nodejs端有很多优秀的框架 如：express ，koajs，egg</p><h1 id="同构"><a href="#同构" class="headerlink" title="同构"></a><font color="green">同构</font></h1><p>前端和直出端使用同样的代码方案。比如：vue的nuxt ，react的next</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;直出&quot;&gt;&lt;a href=&quot;#直出&quot; class=&quot;headerlink&quot; title=&quot;直出&quot;&gt;&lt;/a&gt;&lt;font color=&quot;green&quot;&gt;直出&lt;/font&gt;&lt;/h1&gt;&lt;p&gt;后端或者说服务端渲染页面并输出&lt;/p&gt;
&lt;p&gt;直白的说在服务端获取页面需要的数据根据模
      
    
    </summary>
    
      <category term="笔记" scheme="http://wangzhikui.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://wangzhikui.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="概念" scheme="http://wangzhikui.com/tags/%E6%A6%82%E5%BF%B5/"/>
    
  </entry>
  
  <entry>
    <title>同比和环比区别</title>
    <link href="http://wangzhikui.com/2019/01/15/%E5%90%8C%E6%AF%94%E5%92%8C%E7%8E%AF%E6%AF%94%E5%8C%BA%E5%88%AB/"/>
    <id>http://wangzhikui.com/2019/01/15/同比和环比区别/</id>
    <published>2019-01-14T16:00:00.000Z</published>
    <updated>2020-06-12T07:05:45.406Z</updated>
    
    <content type="html"><![CDATA[<h1 id="同比和环比区别"><a href="#同比和环比区别" class="headerlink" title="同比和环比区别"></a><font color="green">同比和环比区别</font></h1><h2 id="同比"><a href="#同比" class="headerlink" title="同比"></a>同比</h2><p>与历史同时期比较</p><p>比如：2019年1月与2018年一月相比</p><h2 id="环比"><a href="#环比" class="headerlink" title="环比"></a>环比</h2><p>表示连续2个单位周期（比如连续两月）内的量的变化比</p><p>比如：2018年12月与2018年11月相比</p><h1 id="注"><a href="#注" class="headerlink" title="注"></a><font color="green">注</font></h1><p>同比和环比，这两者所反映的虽然都是变化速度，但由于采用基期的不同，其反映的内涵是完全不同的；一般来说，环比可以与环比相比较，而不能拿同比与环比相比较；而对于同一个地方，考虑时间纵向上发展趋势的反映，则往往要把同比与环比放在一起进行对照</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;同比和环比区别&quot;&gt;&lt;a href=&quot;#同比和环比区别&quot; class=&quot;headerlink&quot; title=&quot;同比和环比区别&quot;&gt;&lt;/a&gt;&lt;font color=&quot;green&quot;&gt;同比和环比区别&lt;/font&gt;&lt;/h1&gt;&lt;h2 id=&quot;同比&quot;&gt;&lt;a href=&quot;#同比&quot; 
      
    
    </summary>
    
      <category term="笔记" scheme="http://wangzhikui.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://wangzhikui.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="概念" scheme="http://wangzhikui.com/tags/%E6%A6%82%E5%BF%B5/"/>
    
  </entry>
  
</feed>
