前言随着 TypeScript 使用的越来越广泛,是时候入门 TypeScript 。接下来,这篇文章学习 TypeScript 时,通过 Webpack 搭建的 TypeScript 开发环境,方便学习。本人也是刚开始入门,难免会出现错误,请不吝指正。
接下来进入 TypeScript 开发环境搭建吧!
TypeScript 安装安装没有什么好说的,就是使用 npm 在终端执行:
123npm i typescript -g // 全局安装tsc -v // 验证是否成功
初始化项目目录1234mkdir typescript_webpack // 创建文件夹cd typescript_webpack // 进入文件夹npm init -y // 生成 package.json 文件,-y:使用默认值快速创建。tsc -init // 创建 tsconfig.json, 指定所在目录为根目录。
此时在项目目录中创建了一个 package.json 文件,后面会在这里面管理三方库。tsconfig.json 文件中指定了用来编译这个项目的根文件和编译选项。后面具体说明配置项含义。
上 ...
原文 《关于移动端适配,你必须要知道的》 - code秘密花园
前言移动端适配,经常遇到的问题。首先要分清 设备独立像素、CSS像素、DPR、PPI、DIP 概念和区别。
基础概念
字体大小区别
1px 问题
UI 图完美适配方案
iPhoneX 适配方案
横屏适配
高清屏图片模糊的问题
…
理解问题产生的原因,可以更好的解决问题。
一、基本概念1.1 英寸(inch)一般用英寸来描述屏幕的大小,如手机 5.7、6.5 等使用的单位都是英寸。
屏幕的尺寸指定是对角线的长度。
1.2 分辨率分辨率一般分为两种:屏幕分辨率和图片分辨率。
屏幕分辨率是指一块屏幕上有多少个像素点。如:iPhone 11 Max Pro 的分辨率是 2688 x 1242,表示的是屏幕在水平和垂直方向上像素点数。
图像分辨率是指图片含有的像素数,比如一张分辨率为 1080*768,表示图片在垂直和水平方向上所具备的像素点数。
1.3 每英寸像素(PPI)PPI 表示每英寸中像素的数目,确切的说是像素密度,对于屏幕来说是指每英寸物理像素的数目及显示器设备的点距。数值越高,代表显示器的显示密度越高。
1PPI ...
一、原型链回忆一下什么是原型链,即每个对象拥有一个原型对象,通过 __proto__ 指针指向上一个原型 ,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null,这种关系被称为原型链(prototype chain)。
原型上的方法和属性并不是复制到新对象中。
123456789function Foo(name) { this.name = name}Foo.prototype.getName = function () { return this.name}Foo.prototype.length = 3let foo = new Foo('owenli')foo
原型上的属性和方法定义在 prototype 对象上,当访问一个属性或者方法时,不仅仅在对象中查找,还会查找对象的原型的原型,一级一级向上查找,直到找到或者原型链的末尾(null)。
当调用 foo.valueOf() 时,方法的查找顺序?
首先从 foo 对象中查找
如果没有,检查 foo 对象的原型(Foo.pr ...
一、什么是构造函数?constructor 返回创建实例对象时构造函数的引用。此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。
构造函数和普通函数没有区别,不同点是构造函数使用 new 来生成实例对象,直接调用就是普通函数。
注意:构造函数首字母通常大写。
1.1 Symbol 是构造函数吗?Symbol 是基本数据类型,他不支持 new Symbol() 操作。
生成 Symbol 实例直接使用 Symbol() 即可。
虽然不是构造函数,但可以获取到 constructor 属性值。
123var sym = Symbol('sym')sym.constructor// ƒ Symbol() { [native code] }
这个 constructor 是哪里来的?其实是 Symbol 原型上的。Symbol.prototype.construnctor 返回创建实例原型的函数。
1.2 constructor 值是只读的吗?分为两种情况:属性值为基本数据类型是只读。属性值为引用类型是可以修改的。
可以直接对 constr ...
一、什么是浅拷贝?如果拷贝的值是基本数据类型,拷贝的是基本类型的值。如果是引用类型拷贝的是内存地址。
浅拷贝只解决了第一层的问题,拷贝第一层的基本类型值,以及第一层的引用类型地址。
也就是说:只能保证第一层数据为基本数据类型时,不会随原数据改变。原数据中包含子对象时,随原数据变化。
1.1 浅拷贝的使用场景1. Object.assign()该方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
let a = {
name: 'owenli',
book: {
title:'前端进阶之路',
price: '66'
}
}
let b = Object.assign({}, a)
console.log('b原始值')
console.log(b)
a.name = '啦啦啦'
a.book.price = '88'
console.log('修改 name 和 pr ...
在 JavaScript 执行上下文创建阶段,会进行 this 绑定,当时提到有五种绑定规则:
默认绑定
隐式绑定
显式绑定(硬绑定)
new 绑定
箭头函数绑定
一、默认绑定在全局环境中默认 this 指向全局对象。严格模式下,this 会指向 undefined 。
二、隐式绑定当函数引用有上下文对象时,隐式绑定规则会把函数中 this 绑定到这个上下文对象。
12345678910function foo() { console.log( this.a );}var obj = { a: 2, foo: foo};obj.foo(); // 2 this 指向 obj
2.1 隐式缺失被隐式绑定的函数特定情况下会丢失绑定对象,应用默认绑定,把this绑定到全局对象或者undefined上。
12345678910111213141516// 虽然bar是obj.foo的一个引用,但是实际上,它引用的是foo函数本身。// bar()是一个不带任何修饰的函数调用,应用默认绑定。function foo() { ...
一、闭包
闭包是指有权访问另一个函数作用域中的变量的函数。 — 红宝书
闭包是一个函数;能够访问另一个函数作用域中的变量。
1.1 闭包的特点
闭包可以访问当前函数以外的变量。
即使外部函数已经返回,闭包仍能访问外部函数定义的变量。(作用域链)
闭包可以更新外部变量的值。
二、作用域链当访问一个变量时,解释器会在当前作用域中查找标示符,如果没找到就去父作用域找,直到找到或者抛出 ReferenceError,最顶端是全局对象。这就是作用域链。
作用域链和继承查找的区别:继承查找在当前对象和原型都找不到,会返回 undefined;但作用域链查找找不到则会抛出 ReferenceError。
三、测试题1234567891011var data = [];for (var i = 0; i < 3; i++) { data[i] = function () { console.log(i); };}data[0](); // 3data[1](); // 3data[2](); // 3
循环结束后,全局执行上下文 VO 是:
...
一、执行上下文1.1 定义执行上下文是 JS 代码解释和执行时所处的抽象环境。
1.2 种类
全局执行上下文:只有一个,浏览器中指定是 window 对象,this 指向这个对象。
函数执行上下文:无数个,每次函数被调用都会创建一个。
Eval函数执行上下文:不常用,很少见。
二、执行栈执行栈,也叫调用栈,具有后进先出的特点,用来存储程序执行过程中创建的所有的执行上下文。
在程序初次执行时,首先创建全局执行上下文 Push 到栈中。之后每次发生调用 JS 引擎都会创建新的函数执行上下文并 Push 到执行栈的栈顶。当栈顶的函数执行完成后,相应的执行上下文会被 Pop 出栈,继续执行下一个执行上下文。
关于调用栈有五个点需要清楚:
执行是单线程的。
同步执行。
只有一个全局上下文,永远在栈底。
函数上下文,不唯一。
每次调用函数都会创建新的上下文,包括调用自身。
三、执行上下文的创建上下文的创建分为两个阶段:创建阶段 和 执行阶段
3.1 创建阶段(指的是函数被调用,但是函数内部还没执行的阶段)创建阶段:绑定 this,词法环境,变量环境。
12345ExecutionContex ...
前言
万丈高楼平地起,前面两篇地基已经建好,现在开始第一层。示例代码请移步GithubRxSwift 4.4
从本篇开始接下来几篇文章会详细学习 RxSwift 中 Operators,作为 Rx编程的基石,可以使用它来转换,处理和响应事件。
Operators 分为四个部分:
Filtering Operators:过滤
Transforming Operators : 转换
Combing Operators : 组合
Time-Based Operators : 基于时间操作
接下来学习过滤相关的操作。
Filtering Operators过滤操作分为四类:
分类
主要方法
说明
Ignoring Operators
ignoreElements elementAt filter
用于忽略一些元素
Skipping Operators
skip skipWhile skipUntil
Taking Operators
take takeWhile takeUntil
Distinct Operators
distinctUntilChange ...
计算机网络
未读
本文整理 《图解HTTP》中的知识点,方便查阅。
网络基础基本术语
HTTP : 超文本传输协议。
DNS : 域名系统。
FTP : 文件传输协议。
TCP : 传输控制协议
UDP : 用户数据报协议。
TCP/IP协议族 : 通常使用的网络是在 TCP/IP 协议族的基础上运行的。HTTP 属于它内部的一个子集。
URI 全称统一资源标识符。
URL 全称统一资源定位符。
TCP/IPTCP/IP协议族分为四层:应用层、传输层、网络层、数据链路层。
应用层
决定向用户提供应用服务是通信的活动。TCP/IP 中预存了各类通用的应用服务。例如: FTP、HTTP、DNS等。
传输层
为应用层提供处于网络连接中的两台计算机之间的数据传输。 例如:TCP 和 UDP。
网络层
网络层用来处理网络上流动的数据包。数据包是网络传输的最小单位。
数据链路层
用于处理连接网络的硬件部分。
IP、TCP 和 DNSIPIP 协议位于网络层,TCP/IP 协议族中的指的是 IP 协议。它的作用是把各种数据包传递给对方,还有两个重要条件 IP 地址和 MAC ...