<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[q448366830的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/q448366830</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; q448366830]]></copyright><item><title><![CDATA[前端简单文件上传剖析]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/106497807</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/106497807</guid><author>q448366830</author><pubDate>Tue, 02 Jun 2020 15:48:16 +0800</pubDate><description><![CDATA[前端的权限等级很低，大家都懂。不然的话打开个网页就是前端主宰电脑了（给你弹恶心的窗口，让你下载你不想下载的东西，偷你的文件等），这显然是不科学的。

我们上传文件也是需要用户去主动操作触发。

三种方式触发：

选择上传
	拖拽文件
	复制粘贴
显然是我们比较常见的几种方式。

我将只介绍普通的上传，也就是点击上传：+



&lt;body&gt;

&lt;formaction=""&gt;

&lt;inputtype="file"name=""id="fileId"&...]]></description><category></category></item><item><title><![CDATA[突然有一天，发现自己全栈了。]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/106158660</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/106158660</guid><author>q448366830</author><pubDate>Sat, 16 May 2020 14:18:56 +0800</pubDate><description><![CDATA[全栈了。很突然的发现自己已经勉强全栈了。继续加油。

]]></description><category></category></item><item><title><![CDATA[字节一面面经（9成凉凉）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/104414351</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/104414351</guid><author>q448366830</author><pubDate>Thu, 20 Feb 2020 17:25:30 +0800</pubDate><description><![CDATA[自我介绍一下
Await的基础应用
闭包的与使用
函数柯里化
函数柯里化实现一下sun()()() 与sum()的相同功能。
防抖算法，需要应用函数柯里化技巧
虚拟dom
Mvvm与mvc区别
Vue有什么优点，为什么
CLI有什么用？为什么要CLI，怎么实现代码构建清楚无用代码的
弹窗的封装用了什么原生方法
组件的（非静态啥的？）区别
Axios怎么实现的和Xhr有什么区别
Xhr怎么用的
Vu...]]></description><category></category></item><item><title><![CDATA[好久不见，疫情严重，无聊在家，决定巩固一下自己所学习的算法之类的知识。（防抖与节流）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/104254079</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/104254079</guid><author>q448366830</author><pubDate>Mon, 10 Feb 2020 20:35:13 +0800</pubDate><description><![CDATA[因为疫情的原因没能够好好的准备去实习的复习。对我来说是一件坏事也是一件好事情。坏事情就是我很有可能不会迈出那一步了，在短时间内。好事情是我能够沉下心去好好的学习有关于前端的知识。
来来回回学习前端也快满了一年了，觉得自己实在是浪费了太多的时间在没必要的地方。但是也不能说是没有收获的。如今回到正确的路上，算晚也不算太晚了。
如果看到这篇文章的你是一个新手的话，刚刚踏上前端的路并没有太久，切记，千万不...]]></description><category></category></item><item><title><![CDATA[最近做的一个博客的小例子（二）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/96703176</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/96703176</guid><author>q448366830</author><pubDate>Sun, 21 Jul 2019 11:16:12 +0800</pubDate><description><![CDATA[接着上次添加博客的组件，这次我们 这个项目我将会分成比较多次进行发布（太懒了，打字真麻烦）
上次的博客添加事件post将我们的数据发送至后端，我们这时候就需要一个后台将我们发送的文章保存起来
我这里推荐使用的是firebase这个工具。
他是谷歌的，所以可能会需要一个翻越墙壁的软件配合。

话不多我们开始。

这里呢我已经建立好了一个Demo了，如果不懂使用的可以去研究研究百度和他的文档
我们进入...]]></description><category></category></item><item><title><![CDATA[最近做的一个博客的小例子（一）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/96573751</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/96573751</guid><author>q448366830</author><pubDate>Sat, 20 Jul 2019 11:53:42 +0800</pubDate><description><![CDATA[这个博客的功能虽然挺少，但是使用起来还是对vue的理解有了一点的进步。
这个小项目的技术栈为：vue,vue cli3,vue router,axios,fire base。
编辑器是使用的vs code。
首先先建立vue的脚手架，使用命令：vue create . 。在一个我创建好的目录之下建立脚手架。
之后把脚手架中默认的内容去掉。
首先我的博客的常规布局需要用到四个组件。
1、顶部导航栏。...]]></description><category></category></item><item><title><![CDATA[Vue的基础必备知识]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/91610281</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/91610281</guid><author>q448366830</author><pubDate>Wed, 12 Jun 2019 20:13:43 +0800</pubDate><description><![CDATA[Vue和 JQuery的完全操作dom不同，他是通过一些特殊的html语法，将dom和数据绑定，创建了这种绑定，DOM和数据保持同步，一更新数据，dom自动更新。

vue.js是javascript MVVM库（model-view-ViewModel）
ViewModel便是vue.js核心，它是一个vue实例。vue实例作用在某个html元素上，可以是某个指定id元素。
vue.js可以实现...]]></description><category></category></item><item><title><![CDATA[【转载bootstrap导航栏的一些小应用】]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90380439</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90380439</guid><author>q448366830</author><pubDate>Mon, 20 May 2019 19:02:59 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/jipinglong/p/9032640.html

]]></description><category></category></item><item><title><![CDATA[数组的一些操作]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90343876</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90343876</guid><author>q448366830</author><pubDate>Sun, 19 May 2019 16:20:30 +0800</pubDate><description><![CDATA[如下图所示的两种创建数组的办法，有着一个细微的差异。
上边一个数定义了   10个数据排列的数组。
下面是一个里面有1个数据10 的数组。

数组名字.push()可以将数据push入数组的末尾。
数组名字.unshift()可以将数据放入数组前面。
数组名字.pop()将数组最后一位剪切出来。
数组名字.reverse()数组逆反。


arr.sort();升序排序。比较的是ASC码
以下是自...]]></description><category></category></item><item><title><![CDATA[继承extends，inherit]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90143583</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90143583</guid><author>q448366830</author><pubDate>Sun, 12 May 2019 18:47:51 +0800</pubDate><description><![CDATA[上次我们了解到了原型链的应用，我们发现了这样的继承方式会造成很多我们不想去继承的属性也会继承过来，这样的去使用它效率是非常低下的。
apply和call也勉强可以算是继承的一种方式。相对于上一种方式，这种方式的继承很大的提升了性能。但是这个方式不能使用它的原型，且每次运行都会默认去执行两个方法。
下面是我们的一种方法，
通过直接操作对象属性去实现，这样的效率比较低下。

Target继承Origi...]]></description><category></category></item><item><title><![CDATA[原型/原型链（三）（含call与apply方法的介绍）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90142220</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90142220</guid><author>q448366830</author><pubDate>Sun, 12 May 2019 16:53:11 +0800</pubDate><description><![CDATA[一般来说原型与父类的增删改查是一致的。
但是有一个特例。
若父亲祖先开辟了一个方法空间，子类去调用这个方法空间的时候会获得这个方法空间的使用权，就可以进行正常的增删改查。
this的理解有一句简单粗暴的话：谁调用这个方法，this就指向谁。这在80%的情况都适用.
关于父类祖先，还有更加好的一种方法。

就是Object.create()方法。
上一次我说了所有的原型都指向最终原型，其实是不太严谨...]]></description><category></category></item><item><title><![CDATA[原型/原型链（二）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90140477</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90140477</guid><author>q448366830</author><pubDate>Sun, 12 May 2019 14:46:20 +0800</pubDate><description><![CDATA[这里的意思是__proto__指向的内存指针与Person.prototype一致。
当Person.prototype再次被赋予另外一个内存空间的时候，原有的空间并没有被释放。
__proto__任然指向原来的内存空间。
所以当想要改变父类祖先的属性的时候，千万不要再次赋予新的内存空间。

此处便是祖先指向另外一块内存空间。

可以通过直接修改属性值去改变父类祖先的属性。
以下是原型链的基本表...]]></description><category></category></item><item><title><![CDATA[原型/原型链（一）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90115904</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90115904</guid><author>q448366830</author><pubDate>Sat, 11 May 2019 22:09:29 +0800</pubDate><description><![CDATA[基本概念如图。

如图所示类似于继承关系，Person.prototype为Person的父类祖先，他也是一个类。
Person可以直接调用他父类祖先的方法和属性。
关于继承之类的知识在C++和JAVA中也有，我也不过多记录他们相同的属性和作用。
至于为什么不直接使用对象来代替父类祖先，是因为每次 在对象上进行增删改查，对象都会再执行一次原有的对象过程，这样会造成代码耦合，使得性能下降。当这样操...]]></description><category></category></item><item><title><![CDATA[一些基础的JS杂记查缺补漏（4）【包含对象知识点】]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90111244</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90111244</guid><author>q448366830</author><pubDate>Sat, 11 May 2019 16:19:13 +0800</pubDate><description><![CDATA[今天状态不好，有些瞌睡，无法集中注意力，就不做新知识的总结了，只记录一些杂记。
一、立即执行函数，是指被仅被执行一次就会被销毁的函数，一般形式为（function NAME（）{}（））。除了执行完就被销毁以外与普通一般函数没有任何区别。前一个小括号可以定义形参，后一个小括号填写的是实参。
二、好了，这是第二天，上文是昨天写的。接下来将接触对象的一些基本操作。
1、这是对象的两种构建方式，并没有任...]]></description><category></category></item><item><title><![CDATA[作用域、作用域链]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/90083748</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/90083748</guid><author>q448366830</author><pubDate>Fri, 10 May 2019 20:54:20 +0800</pubDate><description><![CDATA[【【scope】】：每个javascript函数都是一个对象，对象中有些属性我们可以访问，有些不可以，这些属性仅供javascript引擎存取，【【scope】】就是其中一个。
【【scope】】指的是我们所说的作用域，其中存储了运行期上下文的集合。
作用域链：【【scope】】中所存储的执行器上下文对象的集合，之歌集合呈链式连接，我们吧这种链式连接叫做作用域链。


当需要去找一个函数的变量的 ...]]></description><category></category></item><item><title><![CDATA[一些基础的JS杂记查缺补漏（3）【包含预编译知识点】]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/89978362</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/89978362</guid><author>q448366830</author><pubDate>Wed, 08 May 2019 22:18:18 +0800</pubDate><description><![CDATA[又是一些小记。
一、JS中的变量未经声明直接赋值，则会将变量设置为全局变量。
二、一切声明的全局变量，都是window的属性。
三、看着看着有个预编译没学过，好的，现在杂记录瞬间转换成预编译
预编译一般进行四部曲操作
一、创建AO对象。
二、找到形参和变量与声明，将变量和形参名作为AO的属性名，值为undefined。
三、将实参和形参统一。（意思好似将实参里面的值放到形参里面去）
四、在函数体里...]]></description><category></category></item><item><title><![CDATA[JAVASCRIPT函数]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/89972956</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/89972956</guid><author>q448366830</author><pubDate>Wed, 08 May 2019 20:41:50 +0800</pubDate><description><![CDATA[补充上节课的一个小知识点
toFixed（）意为保留几位小数，并且会进行四舍五入的计算。
又两种方式去定义函数
function test（）{}
var demo = function（）{}
实参与形参的数据数量的多少没有影响。
实参传入形参的时候会先传入给一个名字叫做arguments的实参列表数组。
形参也有一个数组，名字则是函数名字。这两个数组都是我变你也变的一种方式，但是的确是两个数组...]]></description><category></category></item><item><title><![CDATA[JAVASCRIPT类型转换]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/89969322</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/89969322</guid><author>q448366830</author><pubDate>Wed, 08 May 2019 19:22:47 +0800</pubDate><description><![CDATA[在JS中有显性的类型转换和隐性的类型转换，现在我就显性开始说起就是直接使用方法转换
Number
强行将数据类型转换为Number类型。例如
var m = Number（"“123”）；
则字符串123会强制转换为Number类型的数据。
将字符串改为boolean类型的数据时，true为1，false为0
null转化为数字则也是0。undefined则不能，会转为NaN。a,b,c这些转换的...]]></description><category></category></item><item><title><![CDATA[一些基础的JS杂记查缺补漏（2）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/89966562</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/89966562</guid><author>q448366830</author><pubDate>Wed, 08 May 2019 18:28:23 +0800</pubDate><description><![CDATA[依旧是看了会视频，有些不太记得住的知识点将会被我记下来。
由于这段时间都会去巩固JS的基础知识，将不会更多的去记录CSS和HTML的基础布局与一些精美的登录界面的制作。

Window prompt() 方法
prompt()方法用于显示可提示用户进行输入的对话框。
这个方法返回用户输入的字符串。
语法
prompt(msg,defaultText)
msg:这将是你在对话框显示的文字。
defa...]]></description><category></category></item><item><title><![CDATA[一些基础的JS杂记查缺补漏（1）]]></title><link>https://blog.youkuaiyun.com/q448366830/article/details/89891739</link><guid>https://blog.youkuaiyun.com/q448366830/article/details/89891739</guid><author>q448366830</author><pubDate>Mon, 06 May 2019 21:20:42 +0800</pubDate><description><![CDATA[先来一些小知识
JS是单线程执行的。
主流浏览器：IE Chrome firfox Opera Safari
内核分别为：trident wbkit/blink Gecko presto webkit
JS的引入分为内联和外联文件
分别为 1.
2.若是两个同时使用，则外部的文件生效。
var的命名规则：
1.变量名必须以英文字母、_、开头。2.可以包含英文字母、、开头。
 2.可以包含英文字母、...]]></description><category></category></item></channel></rss>