<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[DavidFFFFFF的博客]]></title><description><![CDATA[一个小菜鸟的程序进击史]]></description><link>https://blog.youkuaiyun.com/DavidFFFFFF</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; DavidFFFFFF]]></copyright><item><title><![CDATA[关于浏览器的执行机制（event loop）]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/108172794</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/108172794</guid><author>DavidFFFFFF</author><pubDate>Sat, 22 Aug 2020 18:54:11 +0800</pubDate><description><![CDATA[浏览器是多线程的，它们在内核制控下相互配合以保持同步。一个浏览器至少实现三个常驻线程：JavaScript引擎线程，GUI渲染线程，浏览器事件触发线程。我们在学习浏览器的执行机制前，首先要了解浏览器的线程和线程之间的关系；

1.浏览器的线程有哪些？

GUI 渲染线程


负责渲染浏览器界面，解析 HTML，CSS，构建 DOM 树和 RenderObject 树，布局和绘制等；
当界面需要重绘（Repaint）或由于某种操作引发回流(reflow)时，该线程就会执行；
注意：GUI 渲染线程与 JS .]]></description><category></category></item><item><title><![CDATA[手写js ---- instanceof方法]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107922672</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107922672</guid><author>DavidFFFFFF</author><pubDate>Mon, 10 Aug 2020 21:38:47 +0800</pubDate><description><![CDATA[递归方法：
function instanceof_(left,right){
    if(left.__proto__ === null){
        return false;
    }else{
        if(left.__proto__ === right.prototype){
            return true;
        }else{
            return instanceof_(left.__proto__,right);
        ]]></description><category></category></item><item><title><![CDATA[手写Js代码 (3) ------ 函数柯里化]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107922247</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107922247</guid><author>DavidFFFFFF</author><pubDate>Mon, 10 Aug 2020 21:26:29 +0800</pubDate><description><![CDATA[function multi() {
    var args = Array.prototype.slice.call(arguments);
    var fn = function(...arg) {
       return multi.apply(null,arg.concat(args));
    }
    fn.toString = function() {
        return args.reduce(function(a, b) {
            return .]]></description><category></category></item><item><title><![CDATA[手写Js代码 (2) ------ call方法，apply方法，bind方法]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107921710</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107921710</guid><author>DavidFFFFFF</author><pubDate>Mon, 10 Aug 2020 20:54:31 +0800</pubDate><description><![CDATA[// 实现思路，给target对象加symble类型的属性，指向this
Function.prototype.myCall = function (target,...args){
    // 判断如果targe为null或者undefined，将this指向window 或者Clobalthis
    target = target || globalThis;
    
    // 将this指针指向返回的对象
    const prop = Symbol();
    target[prop]]></description><category></category></item><item><title><![CDATA[手写Js代码 (1) ------ new方法]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107920903</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107920903</guid><author>DavidFFFFFF</author><pubDate>Mon, 10 Aug 2020 20:06:39 +0800</pubDate><description><![CDATA[function _new(target,...args){
    // 定义一个返回的对象
    let obj = {};
    if(target.prototype !== null){
        // 对象的原型对象指向目标的构造函数
        obj = Object.create(target.prototype);
    }
    // 将this指针指向返回的对象
    const result = target.apply(obj,args);
    if((t]]></description><category></category></item><item><title><![CDATA[当class遇上console.log的坑，该怎么办？]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107902039</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107902039</guid><author>DavidFFFFFF</author><pubDate>Sun, 09 Aug 2020 23:18:13 +0800</pubDate><description><![CDATA[最近为了面试，疯狂刷题，当我遇到这个题；大脑已经崩塌，我开始钻牛角尖了，怎么办??? 干了这杯苦酒，下辈子不当程序员！！！

先上题目：
 const chain=new Chain();
 chain.eat().sleep(5).eat().sleep(6).eat().work()
 输出结果是：
 console.log(eat-&gt;sleep(5)-&gt;eat-&gt;sleep(6)-&gt;eat-work);

其实吧，题目很简单，只要class的方法返回自身就行；先上我的代码
c.]]></description><category></category></item><item><title><![CDATA[npm install原理分析]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107878497</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107878497</guid><author>DavidFFFFFF</author><pubDate>Sat, 08 Aug 2020 13:30:20 +0800</pubDate><description><![CDATA[npm原理分析，主要看Npm版本之间的提升；
npm 3.0 扁平化 ：安装模块时，不管其是直接依赖还是子依赖的依赖，优先将其安装在 node_modules 根目录。
npm 5.0 新增了 package-lock.json 文件,锁定依赖结构

看这张图就能大体了解npm install的原理

1.检查 .npmrc 文件：优先级为：项目级的 .npmrc 文件 &gt; 用户级的 .npmrc 文件&gt; 全局级的 .npmrc 文件 &gt; npm 内置的 .npmrc 文件
2.检查项目.]]></description><category></category></item><item><title><![CDATA[Vue.js 组件编码规范]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107857441</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107857441</guid><author>DavidFFFFFF</author><pubDate>Fri, 07 Aug 2020 10:53:09 +0800</pubDate><description><![CDATA[Vue.js 组件编码规范

这个 链接 用来查看本翻译与英文版是否有差别（如果你没有看到 README.md 发生变化，那就意味着这份翻译文档是最新的）。


  

其它语言

英文
葡萄牙语
日本
韩语
俄语

目标
本规范提供了一种统一的编码规范来编写 Vue.js 代码。这使得代码具有如下的特性：

其它开发者或是团队成员更容易阅读和理解。
IDEs 更容易理解代码，从而提供高亮、格式化等辅助功能
更容易使用现有的工具
更容易实现缓存以及代码包的分拆

本指南为 De Voorhoede 参考 R]]></description><category></category></item><item><title><![CDATA[JavaScript 内存机制]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107716345</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107716345</guid><author>DavidFFFFFF</author><pubDate>Mon, 03 Aug 2020 18:22:03 +0800</pubDate><description><![CDATA[看了几篇关于js内存机制的文章，感觉大家讲内容的都是大差不差，下面是我整理了多篇文章后得出的最全最核心内容。

1.简介
学过c++的同学都知道，内存是要主动申请和释放的。每种编程语言都有它的内存管理机制，比如简单的C有低级的内存管理基元，像malloc(),free()。同样我们在学习JavaScript的时候，很有必要了解JavaScript的内存管理机制。

JavaScript的内存管理机制是:内存基元在变量（对象，字符串等等）创建时分配，然后在他们不再被使用时“自动”释放。

对于前端开发来说，.]]></description><category></category></item><item><title><![CDATA[HTTPS 原理分析]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107588138</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107588138</guid><author>DavidFFFFFF</author><pubDate>Sun, 26 Jul 2020 02:02:19 +0800</pubDate><description><![CDATA[随着https建站成本的降低（颁发ca证书的权威机构可以颁发免费、低价格的证书），使用https协议的网站用的越来越多。大家都知道使用Https`协议的网站更安全，像ssl应用层，对称加密和非对称加密，证书验证等等，那么问题来了，使用https协议一定就是安全的吗？

带着这个问题，我们来深入探究下https的原理和如何保证安全性的。
https原理

先po一张图，了解下Https在http的基础上做了哪些事？

https协议本身并不是一种新的协议，在HTTP跟TCP中间加多了一层加密层TLS/SSL.]]></description><category></category></item><item><title><![CDATA[Vue源码分析 ----- 消失的$dispatch 和 $broadcast]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107545325</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107545325</guid><author>DavidFFFFFF</author><pubDate>Thu, 23 Jul 2020 19:50:59 +0800</pubDate><description><![CDATA[$dispatch 和 $broadcast作为一对情侣 ????属性，在 Vue 1.0 中主要用来实现基于组件树结构的事件流通信 —— 通过向上或向下以冒泡的形式传递事件流，以实现嵌套父子组件的通信。但是由于其显功能缺陷，在 Vue 2.0 中就被移除了。虽然 Vue 官网已经不再支持使用 $dispatch 和 $broadcast 进行组件通信，但是在很多基于 Vue 的 UI 框架中都有对其的封装，包括 element-ui、iview 等等。
那么$dispatch 和 $broadcast 到]]></description><category></category></item><item><title><![CDATA[Vue源码解析-------组件之间的通信]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107522569</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107522569</guid><author>DavidFFFFFF</author><pubDate>Wed, 22 Jul 2020 21:31:34 +0800</pubDate><description><![CDATA[vue组件之间的通信分为两种：
父子组件之间的通信：

props
event（通过v-on在父组件声明，通过emit在子组件调用）
v-model（prop是value，通过触发input事件动态更改变量）
.sync  通过修饰符，默认绑定对象，并通过对象或者对象属性的name为事件名在子组件通过emit触发；
ref
$parent
$children

非父子组件之间的通信：

$attr
$listeners
provide,inject 动态注入
$root 访问根实例
vuex 集中式存储所.]]></description><category></category></item><item><title><![CDATA[git常用命令二 git rebase]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107488531</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107488531</guid><author>DavidFFFFFF</author><pubDate>Tue, 21 Jul 2020 15:56:02 +0800</pubDate><description><![CDATA[rebase 的意义，就是对一个分支做「变基」操作。
常用的场景：

Rebase 场景一：合并多个commit提交；
1.我们来合并最近的 4 次提交纪录，执行：
git rebase -i HEAD~4

这时候，会自动进入 vi 编辑模式：

pick：保留该commit（缩写:p）
reword：保留该commit，但我需要修改该commit的注释（缩写:r）
edit：保留该commit, 但我要停下来修改该提交(不仅仅修改注释)（缩写:e）
squash：将该commit和前一个commit合.]]></description><category></category></item><item><title><![CDATA[git常用命令一 git reset]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107484122</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107484122</guid><author>DavidFFFFFF</author><pubDate>Tue, 21 Jul 2020 11:54:59 +0800</pubDate><description><![CDATA[常用场景：当你在工作的时候发现之前commit的提交的代码有问题，你想撤回在本地commit提交，最简单的方法就是git reset

下面介绍下git reset的原理和常用的option参数；
git reset就是可以让HEAD这个指针指向其他的节点。比如我们有一次commit不是不是很满意，需要回到上一次的Commit里面。那么这个时候就需要通过reset，把HEAD指针指向上一次的commit的点。

在介绍常用参数之前，先复习下之前关于本地git add commit 的流程，本地git区域总.]]></description><category></category></item><item><title><![CDATA[CSRF跨域攻击原理浅谈]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107433776</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107433776</guid><author>DavidFFFFFF</author><pubDate>Sat, 18 Jul 2020 20:02:42 +0800</pubDate><description><![CDATA[CSRF（Cross-site request forgery），中文名称：跨站请求伪造，也被称为：one click attack/session riding，缩写为：CSRF/XSRF。

看了好多文章对csrf原理的解释，一直不明白不明白一个B网站的img标签的请求是如何挟持到A网站的cookies进行模拟跨域请求的。
直到看到一位大佬写的一篇文章，我才大体猜到了其中的原理。
不多废话，直接上核心原理：
CSRF攻击是源于WEB的隐式身份验证机制！WEB的身份验证机制虽然可以保证一个请求是来自于某.]]></description><category></category></item><item><title><![CDATA[Vue源码解析(1)]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107089084</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/107089084</guid><author>DavidFFFFFF</author><pubDate>Thu, 02 Jul 2020 17:21:44 +0800</pubDate><description><![CDATA[Dep和watcher的关系


什么关系？
多对多


如何建立的？
data中徐行的get()中建立关系，dep.subs  watcher.depIds


什么时候建立？
初始化，解析模板中的表达式时 ,new Watcher对象时建立；


Array.apply(null, { length: 20 }).map(function () {
	return createElement('p', 'hi')
})

apply函数不是接受数组的吗？为什么可以接受对象；带着好奇我查了下文档，原来从e]]></description><category></category></item><item><title><![CDATA[vscode setting设置 自动保存时整理代码]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/103971561</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/103971561</guid><author>DavidFFFFFF</author><pubDate>Tue, 14 Jan 2020 13:31:59 +0800</pubDate><description><![CDATA[{
  // vscode默认启用了根据文件类型自动设置tabsize的选项
  "editor.detectIndentation": false,
  // 重新设定tabsize
  "editor.tabSize": 2,
  // #每次保存的时候自动格式化
  "editor.formatOnSave": true,
  // #每次保存的时候将代码按eslint格式进行修复
  "...]]></description><category></category></item><item><title><![CDATA[.gitignore不生效问题 转载]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/103052768</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/103052768</guid><author>DavidFFFFFF</author><pubDate>Wed, 13 Nov 2019 17:04:52 +0800</pubDate><description><![CDATA[原文链接
问题：
在使用git进行版本控制的过程中发现，将想被忽略的文件(文件夹)配置到.gitignore文件中后，实际修改了想被忽略的文件，调用git status查看时，仍然会提示提交这些文件。也就是说实际并没有被忽略
原因：
原因是git ignore只会对不在git仓库中的文件进行忽略，如果这些文件已经在git仓库中，则不会忽略。所以如果需要忽略的文件已经提交到本地仓库，则需要从本地仓库...]]></description><category></category></item><item><title><![CDATA[git仓库切换连接方式 【https---ssh]]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/100888617</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/100888617</guid><author>DavidFFFFFF</author><pubDate>Thu, 19 Sep 2019 11:00:46 +0800</pubDate><description><![CDATA[原文链接：https://blog.youkuaiyun.com/fastjack/article/details/79757520

在管理Git项目上，很多时候都是直接使用https url克隆到本地，当然也有有些人使用SSH url克隆到本地。这两种方式的主要区别在于：使用https url克隆对初学者来说会比较方便，复制https url然后到git Bash里面直接用clone命令克隆到本地就好了，...]]></description><category></category></item><item><title><![CDATA[关于canvas.toDataURL 在iOS运行失败的问题]]></title><link>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/95217076</link><guid>https://blog.youkuaiyun.com/DavidFFFFFF/article/details/95217076</guid><author>DavidFFFFFF</author><pubDate>Tue, 09 Jul 2019 18:25:49 +0800</pubDate><description><![CDATA[关于canvas.toDataURL 在iOS运行失败的问题
最近做了一个海报生成的组件，需要drawimage到画布上，image来源包括本地和异地的图片src;
首先讲一点，异地图片如果不设置允许跨域访问，canvas.toDataURL是无法画image的，报画布污染的错；首先放一张我要生成的图；

上面加载了两张本地图片，两张异地图片，写了一些文字；在windows谷歌浏览器跑是好的，是吧...]]></description><category></category></item></channel></rss>