<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[XieJay97的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/XieJay97</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; XieJay97]]></copyright><item><title><![CDATA[JS - 捕获打印窗口关闭事件]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/126742816</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/126742816</guid><author>XieJay97</author><pubDate>Wed, 07 Sep 2022 12:00:29 +0800</pubDate><description><![CDATA[实际上浏览器没有标准化的打印窗口关闭事件，但是根据js单线程这一特性，我们可以在打开打印窗口时同时执行一个异步函数，这样异步函数将被阻塞直到窗口关闭，通用于任何窗口。]]></description><category></category></item><item><title><![CDATA[杂记 - 设计模式（TS代码示例）]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/120609333</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/120609333</guid><author>XieJay97</author><pubDate>Thu, 07 Oct 2021 23:00:11 +0800</pubDate><description><![CDATA[面对对象程序的设计准则
面对对象程序由对象组成, 对象包括数据和对数据进行操作的过程, 过程通常被称为方法或操作.
针对接口编程, 而不是针对实现编程
优先使用对象组合, 而不是类继承
创建型模式
Abstract Factory（抽象工厂）

...]]></description><category></category></item><item><title><![CDATA[杂记 - JavaScript高级程序设计笔记]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/120009217</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/120009217</guid><author>XieJay97</author><pubDate>Fri, 17 Sep 2021 00:04:45 +0800</pubDate><description><![CDATA[第 1 章 什么是 JavaScript
JavaScript 是一门用来与网页交互的脚本语言，包含以下三个组成部分。

ECMAScript：由 ECMA-262 定义并提供核心功能。
文档对象模型（DOM）：提供与网页内容交互的方法和接口。
浏览器对象模型（BOM）：提供与浏览器交互的方法和接口。

第 2 章 HTML 中的 JavaScript
&lt;script&gt; 元素属性。

async：可选。表示应该立即开始下载脚本，但不能阻止其他页面动作，比如下载资源或等待其他脚本加载。
只对外部脚]]></description><category></category></item><item><title><![CDATA[HTML - ＜base＞小结]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/120276600</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/120276600</guid><author>XieJay97</author><pubDate>Mon, 13 Sep 2021 22:22:38 +0800</pubDate><description><![CDATA[在项目开发中, 发现很多脚手架提供的 index.html 模板会含有 &lt;base&gt; 标签, 比如 Angular CLI.
&lt;base&gt; 的 href 属性指定了文档中所有相对 URL 的基本 URL, 默认值为 location.href.
下例中, &lt;img&gt; 的资源路径为 https://example.com/img.jpg
&lt;base href="https://example.com"&gt;
&lt;img src="img.jpg" /&gt;

]]></description><category></category></item><item><title><![CDATA[杂记 - HTTP/2 和 HTTP/3 简介]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/117710064</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/117710064</guid><author>XieJay97</author><pubDate>Mon, 05 Jul 2021 13:49:15 +0800</pubDate><description><![CDATA[HTTP/2
HTTP/2 的核心为 Binary framing layer
“layer” 表明 binary framing layer 是一个新的层级, 该层级处于 socket interface 和  HTTP API 之间, 作为中间层级
binary framing layer 不会改变 HTTP 请求/响应的语义: 如我们常说的头, 方法
binary framing layer 只改变了传输过程中的编码方式
HTTP/1.x 明文传输通过换行符分割的信息
HTTP/2 将信息分割为二进制]]></description><category></category></item><item><title><![CDATA[杂记 - TLS 详解]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/117668195</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/117668195</guid><author>XieJay97</author><pubDate>Tue, 08 Jun 2021 15:14:49 +0800</pubDate><description><![CDATA[TLS(或被称为SSL)
SSL(Secure Sockets Layer), 由网景(Netscape)公司开发, 是 TLS(Transport Layer Security) 的前身, TLS 的名字更改为了表明此协议不在与网景公司有关, 有时候会混用 SSL 和 TLS 的称谓
TLS 是安全协议, 旨在提供安全的互联网通信
TLS 提供了:

加密: 第三方窃取的数据是不可读的
验证: 确保交换数据的双方身份没有问题
完整: 确保数据没有丢失或者被篡改

TLS 握手发生在 TCP 连接之后
TC]]></description><category></category></item><item><title><![CDATA[JS - 规范下的 this]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/117367129</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/117367129</guid><author>XieJay97</author><pubDate>Mon, 31 May 2021 17:47:15 +0800</pubDate><description><![CDATA[阅读本文请先查看执行上下文
规范定义:
this 关键字: 返回 ResolveThisBinding()
只有function Environment Record(非箭头函数), module Environment Record 以及 global Environment Record的 HasThisBinding() 返回 true, 其它为 false
GetThisBinding():

function Environment Record(非箭头函数)
[[ThisBindingStatu]]></description><category></category></item><item><title><![CDATA[JS - 垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/117255331</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/117255331</guid><author>XieJay97</author><pubDate>Tue, 25 May 2021 15:10:45 +0800</pubDate><description><![CDATA[垃圾回收由 JS 引擎实现, 对于我们来说是无法接触的
建议查看垃圾回收
可达性
可达性: 通过执行上下文链判断内存中的数据是否被引用 (执行上下文可查看我写的文章)
通过判断可达性决定内存中的数据是否可以被清除
例子
var obj = {};

如果了解 C 语言指针以及计算机系统, 那么很容易知道:
上面的声明实际是在堆内存开辟了空间存储复杂数据 {}, 分配的内存地址我们假设为 0x0001
那么 obj 指向栈内存, 存储的值为数据 {} 的地址, 即 0x0001
备注: 复杂数据即数据长度不确]]></description><category></category></item><item><title><![CDATA[JS - 对象获取 Keys 的不同方法]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/117249989</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/117249989</guid><author>XieJay97</author><pubDate>Tue, 25 May 2021 10:37:06 +0800</pubDate><description><![CDATA[以下面代码为例:
const obj = {};
Reflect.defineProperty(obj, "test1", {
  configurable: true,
  enumerable: true,
  value: 1,
  writable: false,
});
Reflect.defineProperty(obj, Symbol("test1"), {
  configurable: true,
  enumerable: true,
  value: 1,
  writable: fa]]></description><category></category></item><item><title><![CDATA[杂记 - TypeScript 4.2]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/116656328</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/116656328</guid><author>XieJay97</author><pubDate>Mon, 24 May 2021 14:35:02 +0800</pubDate><description><![CDATA[未指定类型且无法推测, 类型隐式为any

某类型具有明确子分类时, 应当常见创建子类型声明
type Combine: Block1 | Block2

尽量不使用断言 ! ?

常用的针对多类型缩小范围

typeof
in
instanceof
parameterName is Type, 文档看起来很有用?


如果函数不声明返回类型, 会根据return语句自动推断, 无return或仅有return为void

void代表返回值被忽略, 实际上仍然可以return任何值

函数泛型


约束类]]></description><category></category></item><item><title><![CDATA[JS - 原型及原型链]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/107484252</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/107484252</guid><author>XieJay97</author><pubDate>Sun, 25 Apr 2021 11:29:40 +0800</pubDate><description><![CDATA[new 操作符
先让我们看一段简单的代码：
function Test() {
  this.a = "a";
  this.b = "b";
}
const instance = new Test();

new 操作符做了什么？
引用MDN的说法：


创建一个空白且简单的 JavaScript 对象。
通过new Object()创建一个空白对象。


链接该对象到另一个对象。
为步骤 1 创建的对象添加__proto__属性指向原型。
得到{ __proto__: Test.prototype }。]]></description><category></category></item><item><title><![CDATA[杂记 - 词法作用域和动态作用域]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/107534278</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/107534278</guid><author>XieJay97</author><pubDate>Sun, 25 Apr 2021 11:29:31 +0800</pubDate><description><![CDATA[作用域
在解释这些专业术语之前，我说一下个人观点，我一直认为这些术语，其概念不是绝对的，特别是当某一术语应用于广泛领域的时候。
作用域这一术语就是如此，它广泛适用于计算机语言，所以本文对作用域的解释不是绝对的。
来自wiki的解释：
In computer programming, the scope of a name binding—an association of a name to an entity, such as a variable—is the region of a computer ]]></description><category></category></item><item><title><![CDATA[JS - 规范定义的执行上下文]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/107544608</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/107544608</guid><author>XieJay97</author><pubDate>Sun, 25 Apr 2021 11:29:24 +0800</pubDate><description><![CDATA[本文根据ES6 规范关于执行上下文的内容来解读 JavaScript 程序运行的实际情况。
Lexical Environments（词法环境）
在论述执行上下文之前，我们需要了解一个概念：词法环境。
A Lexical Environment is a specification type used to define the association of Identifiers to specific variables and functions based upon the lexical nest]]></description><category></category></item><item><title><![CDATA[JS - 从规范解读浏览器事件循环]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/107929134</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/107929134</guid><author>XieJay97</author><pubDate>Sun, 25 Apr 2021 11:29:18 +0800</pubDate><description><![CDATA[前言
在讨论事件循环之前，其实是想介绍 V8 引擎与浏览器之间的联系，奈何学艺不精，网上的资料也是参差不齐，所以不敢侃大山。
不过还是可以确定以下几点：

浏览器提供了 JS 代码运行的额外环境，如 window 对象、事件循环模型。
V8 引擎只负责执行 JS 代码，即调用栈中有啥就执行啥，至于代码什么时候、什么顺序入栈由浏览器控制。

事件循环的作用
众所周知，JavaScript 是单线程运行的，这就意味着执行像 setTimeout 中的回调函数，如果没有一个机制让代码继续执行，那么 JS 程序只能]]></description><category></category></item><item><title><![CDATA[杂记 - WSL2 局域网访问, 代理设置, IP设置(已集成工具)]]></title><link>https://blog.youkuaiyun.com/XieJay97/article/details/111074439</link><guid>https://blog.youkuaiyun.com/XieJay97/article/details/111074439</guid><author>XieJay97</author><pubDate>Sat, 12 Dec 2020 17:31:51 +0800</pubDate><description><![CDATA[环境 Ubuntu 20.04
局域网访问

wsl2监听地址设置为0.0.0.0, 如常见的命令行参数 --host=0.0.0.0
新建powershell脚本(文件后缀 .ps1)

# 获取 Windows 和 WSL2 的 ip
$winip = bash.exe -c "ip route | grep default | awk '{print `$3}'"
$wslip = bash.exe -c "hostname -I | awk '{print `$1}'"
$found1 = $win]]></description><category></category></item></channel></rss>