<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HTongi的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/HTongi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HTongi]]></copyright><item><title><![CDATA[Mac系统下配置JDK]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/113740918</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/113740918</guid><author>HTongi</author><pubDate>Sun, 07 Feb 2021 15:03:47 +0800</pubDate><description><![CDATA[本文主要讲述Mac下的JDK环境配置；


下载jdk安装包


下载地址https://www.oracle.com/java/technologies/javase-jdk15-downloads.html
下载对应的安装包，会下载下来一个dmg后缀文件
这就是下载下来文件，点击之后进行安装，安装之后单机该文件，傻瓜式的安装就好了


下面是比较重要的地方，安装之后，还需要能在终端使用jdk环境，所以还需要在mac上配置路径


我们要找到这个jdk文件的路径，进入到根目录

这就是咱的文件路径


然]]></description><category></category></item><item><title><![CDATA[electron-builder打包Electron桌面应用程序]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/113726323</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/113726323</guid><author>HTongi</author><pubDate>Sat, 06 Feb 2021 15:47:04 +0800</pubDate><description><![CDATA[electron-builder是一个完整的electron项目打包分发的解决方案，并且可以兼容Mac windows和Linux不同的系统，相比electron-packer功能更加完善，打包出来的安装包也更加轻量级

首先会有一个完备的electron项目，你都要打包了总有完整的项目吧
其次下载安装electron-builder依赖，可以全局安装也可以只在项目中安装依赖

npm install -g electron-builder （这是全局安装）

如果是在项目中安装electron-build]]></description><category></category></item><item><title><![CDATA[Electron主进程与渲染进程的通信]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/113725826</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/113725826</guid><author>HTongi</author><pubDate>Sat, 06 Feb 2021 15:14:03 +0800</pubDate><description><![CDATA[Electron有两个进程，主进程和渲染器进程
1.主进程通过创建BrowserWindow实例来渲染网页，当一个BrowserWindow实例被销毁之后，其实例渲染的网页也随之会被销毁，主进程会管理所有网页以及对应的渲染进程
2.渲染器进程只会管理相应的网页，一个渲染器进程的奔溃，并不会影响到其他渲染进程
以上是对两个进程的简单介绍，在实际的开发当中，难免会遇到两个进程之间相互通信的情况，下面介绍相互通信的方法；

ipcRenderer
通过ipcRender，你可以从渲染进程向主进程发送同步或异步消息]]></description><category></category></item><item><title><![CDATA[Electron中嵌套网页]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/113715598</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/113715598</guid><author>HTongi</author><pubDate>Sat, 06 Feb 2021 11:52:36 +0800</pubDate><description><![CDATA[有时候需要在桌面应用程序中嵌套网页，甚至是整个桌面应用程序的主要页面全是嵌套进去的网页，在Electron中，官方文档就给了我们几种不同的方案解决此问题

Iframe
这是H5的一个新标签，可以在网页中，内联一个全新的网页，而在electron中，他也是管用的，使用方式与在普通网页中相差无几
webView
把webView当做是一个容器一般，将外来网页放在容器中显示,但是要是使用，需要在主进程当中，创建窗口时，使用webViewTag设置为true

  const mainWindow = new B]]></description><category></category></item><item><title><![CDATA[Electron创建桌面应用程序]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/113713889</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/113713889</guid><author>HTongi</author><pubDate>Sat, 06 Feb 2021 10:54:34 +0800</pubDate><description><![CDATA[Electron是一个可以使用JavaScript，Html和CSS创建桌面应用程序的框架，重要的是此框架，可以跨平台，无论是Mac还是Windows，甚至是linux都可以使用此框架

在使用Electron框架之前，应该安装Node环境
检查您的电脑上是否有node环境

node -v



如果出现版本号，说明电脑上有了node环境


然后在你想要的地方，创建一个文件夹，可以取名为electron-app（也可以随便你喜欢的名字）


进入文件夹之后，初始化文件夹为一个项目，使用命令


npm ]]></description><category></category></item><item><title><![CDATA[React报错]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/111682564</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/111682564</guid><author>HTongi</author><pubDate>Fri, 25 Dec 2020 15:14:16 +0800</pubDate><description><![CDATA[React报错Uncaught Invariant Violation: Rendered more hooks than during the previous render.
这是由于hook两次渲染的次数不一样
不可以将hooks放在条件渲染当中，非常有可能会导致两次条件不一致而导致hooks渲染次数不相同
关于后续的报错信息，就可以看出是哪一个hooks出现了问题
将保证该hooks每次都会渲染或者被定义就可以完美解决该问题

...]]></description><category></category></item><item><title><![CDATA[esLint报错]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/110879703</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/110879703</guid><author>HTongi</author><pubDate>Tue, 08 Dec 2020 19:02:18 +0800</pubDate><description><![CDATA[1.Assignment to property of function parameter ‘item’
原因：循环时，不能修改对象属性
解决：重新深拷贝一个对象，修改拷贝之后的对象

]]></description><category></category></item><item><title><![CDATA[Babel插件 将es6语法转换为es5]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108760151</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108760151</guid><author>HTongi</author><pubDate>Wed, 23 Sep 2020 20:08:27 +0800</pubDate><description><![CDATA[为什么需要Babel插件
这是对ES5之后的版本升级,再ES5之后统称为ES6,新加入了许多语法,使得在浏览器上的兼容性变得差强人意,但可以很好的运行在node.js上,但是又不能进行dom和ajax操作,所以在使用es6语法的时候需要先将es6语法转换为es5语法,然后再运行再浏览器上,使之兼容性变得良好.
下载babel插件,转换es6代码


首先需要node.js环境
在dos窗口可以通过

查看node版本
如果没有可以在官网下载安装


在该目录下新建一个文件夹


在该文件夹中 &gt;npm]]></description><category></category></item><item><title><![CDATA[‘==‘与‘===‘的区别]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108759857</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108759857</guid><author>HTongi</author><pubDate>Wed, 23 Sep 2020 19:36:24 +0800</pubDate><description><![CDATA[使用’=='符号时 左右两边数据类型相同时,直接比较值即可,如果数据类型不同,会自动将数据类型转换为相同的数据类型,再进行比较,如果相同返回true如果不同返回false
使用’==='符号时,左右两边数据类型相同时,才会比较值是否相同,如果相同返回true,不同返回false.但是当左右两边数据类型不同时会直接返回false
例如
100==‘100’ 返回 true
100===‘100’ 返回false
区别就是再数据类型不同的时候

...]]></description><category></category></item><item><title><![CDATA[&&和的区别 |和||的区别]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108759591</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108759591</guid><author>HTongi</author><pubDate>Wed, 23 Sep 2020 19:29:13 +0800</pubDate><description><![CDATA['&amp;&amp;‘和’||'是逻辑运算符   '&amp;‘和’|'是位运算符
最大的区别是运算方法不太一样
位运算符针对二进制形式 个位与个位比较,十位与十位比较,以此类推,位数不足再前面补零
'&amp;'是全为1才得1   '|'是只要有一个为1就为1
1010010
&amp;
1010101
得
1010000
'&amp;&amp;‘和’||'是逻辑运算符 结果会是boolean类型
例如 a&amp;&amp;b
当a是为false时  无论b是true或者false 该表达式结果都是f]]></description><category></category></item><item><title><![CDATA[JavaScript Generator的异步操作的同步封装]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108458994</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108458994</guid><author>HTongi</author><pubDate>Tue, 08 Sep 2020 00:01:54 +0800</pubDate><description><![CDATA[首先介绍Generator函数

Generator 函数是 ES6 提供的一种异步编程解决方案，语法行为与传统函数完全不同，Generator函数有多种理解角度。语法上，首先可以把它理解成，Generator 函数是一个状态机，封装了多个内部状态。执行 Generator函数会返回一个遍历器对象，可以依次遍历 Generator 函数内部的每一个状态。

我们需要知道的是通过Generator函数可以返回一个遍历器对象，就可以使用next()方法。
在例子中进行详细的介绍
  //异步操作的同步封装
  ]]></description><category></category></item><item><title><![CDATA[JavaScript Promise介绍]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108458745</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108458745</guid><author>HTongi</author><pubDate>Mon, 07 Sep 2020 23:50:20 +0800</pubDate><description><![CDATA[Promise 是异步编程的一种解决方案，比传统的解决方案（回调函数和事件）更合理和更强大。它由社区最早提出和实现，ES6将其写进了语言标准，统一了用法，原生提供了Promise对象。
所谓Promise，简单说就是一个容器，里面保存着某个未来才会结束的事件（通常是一个异步操作）的结果。
从语法上说，Promise是一个对象，从它可以获取异步操作的消息。Promise 提供统一的API，各种异步操作都可以用同样的方法进行处理。
有了Promise对象，就可以将异步操作以同步操作的流程表达出来，避免了层层嵌.]]></description><category></category></item><item><title><![CDATA[javascript ajax基础]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108230919</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108230919</guid><author>HTongi</author><pubDate>Tue, 25 Aug 2020 23:56:05 +0800</pubDate><description><![CDATA[什么是ajax

Ajax即“Asynchronous Javascript And XML”(异步JavaScript
和XML)，是指一种创建交互式网页应用的网页开发技术。Ajax=异步JavaScript和XML（标准通用标记语言的子集）。通过在后台与服务器进行少量数据交换,Ajax可以使用网页实现异步更新。这意味着可以在不重新加载整个网页的情况下，对网页的某部分进行更新（无刷新技术）。传统的网页（不使用Ajax）如果需要更新内容，必须重载整个网页页面。
AJAX引擎会在不刷新浏览器地址栏的情况下，发]]></description><category></category></item><item><title><![CDATA[javascript原型以及原型链]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108230525</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108230525</guid><author>HTongi</author><pubDate>Tue, 25 Aug 2020 23:18:47 +0800</pubDate><description><![CDATA[什么是原型
函数有原型，原型存放一些公共属性和方法，函数的本质也是一个对象，在函数对象内部有一个prototype指针指向原型,并且构造函数创建的实例对象中__proto__也指向这个原型对象， 原型对象中有constructor指向函数本身；
为什么要有原型
首先看一段代码
// 一个构造函数
var foo =function(name,age) {
  this.name=name;
  this.age=age;
  sayName:function(){
  console.log(this.na]]></description><category></category></item><item><title><![CDATA[js 实现两数相加的算法]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108066354</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108066354</guid><author>HTongi</author><pubDate>Mon, 17 Aug 2020 23:26:01 +0800</pubDate><description><![CDATA[关于算法 两数相加 (leetcod上的的一道算法题)
给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
示例：
输入：(2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4)
输出：7 -&gt; 0 -&gt; 8
原因：342 + 465 = 807

首先我们要了]]></description><category></category></item><item><title><![CDATA[javaScript 重写unshift（）方法]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/108039212</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/108039212</guid><author>HTongi</author><pubDate>Sun, 16 Aug 2020 17:35:46 +0800</pubDate><description><![CDATA[Array.prototype.unshift()是数组原型中的非静态方法,用于在数组开头插入一个或多个元素,并且返回数组长度,参数是要插入的值.并且原值是要改变的
在了解本来的功能之后就可以开始重写了
//将重写的方法添加到原型当中
 Array.prototype.myUnshift = function() {
            //这里我们从后往前遍历,因为是在数组前面添加元素,这样就不会丢失数据,长度是原来数组的长度加上要添加的元素个数 
            for (var i = t]]></description><category></category></item><item><title><![CDATA[javaScript中this的使用]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/107993588</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/107993588</guid><author>HTongi</author><pubDate>Sat, 15 Aug 2020 22:29:17 +0800</pubDate><description><![CDATA[解析器在调用函数每次都会向函数内部传递一个隐含的参数，开发者并看不到，这个隐含的参数就是this
this本质就是一个参数，只不过是浏览器传入的，this指向一个对象，称为函数的上下文对象，
this 就像一把利剑，不同的使用方式，会指向不同的对象；
函数调用的方式不同会this会指向不同的对象；

以函数的方式调用时，this指向windows

// 这里定义一个函数
 function foo(){
    console.log(this);
 }
 foo();
 //这里调用foo()函数 

]]></description><category></category></item><item><title><![CDATA[javaScript函数回调 一知半解]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/107979599</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/107979599</guid><author>HTongi</author><pubDate>Thu, 13 Aug 2020 15:15:32 +0800</pubDate><description><![CDATA[回调函数的官方英文解释是：
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed。
翻译过来就是将函数作为一个参数传递给另一个函数，在父函数执行完成之后在执行这个函数，大概就是这个意思。
在js中函数或者说是方法是可以作为参数传递的，被传递的函数称为回调函数，而接受参数的函数为主函数，也就是说，在主函数]]></description><category></category></item><item><title><![CDATA[js中浅拷贝与深拷贝的区别]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/107936077</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/107936077</guid><author>HTongi</author><pubDate>Tue, 11 Aug 2020 15:24:51 +0800</pubDate><description><![CDATA[浅拷贝与深拷贝在这里只针对引用数据类型；
通俗来讲：

浅拷贝 只复制对象的引用，也就是一个地址
深拷贝 会复制对象的本身，会另开辟一个空间存放复制后的新对象

在js中
引用数据类型的指针存放在栈中，而对象本身存放在堆中，指针只是指向对象本身的一个地址。

如上图 深拷贝会在堆区新开辟一个空间存放对象 在对拷贝后的对象进行更改时不会改变原来的对象。
浅拷贝则相反。

...]]></description><category></category></item><item><title><![CDATA[linux常用命令(够用)]]></title><link>https://blog.youkuaiyun.com/HTongi/article/details/107887331</link><guid>https://blog.youkuaiyun.com/HTongi/article/details/107887331</guid><author>HTongi</author><pubDate>Sun, 09 Aug 2020 21:11:56 +0800</pubDate><description><![CDATA[基础命令


clear 清理屏幕


cd  进入文件夹
cd+/ 进入根目录
cd+空格 回到家目录
cd+/+绝对路径
cd+/+相对路径
cd+ …返回上一层


ls 查看文件
ls  ./查看指定文件夹一下的内容
ls /
ls -a查看所有文件包括隐藏文件
ls -A查看所有文件不包括. …
ls -l查看文件的详细信息，长查看


mkdir+文件夹名 在当前的路径下新建一个文件夹


touch+文件名 创建文件


rmdir 删除文件夹 不可以删除空文件夹以及文件


rm -r 删除]]></description><category></category></item></channel></rss>