本文用于记载我的前端进阶之路,整理知识体系。顺便练习一下Markdown语法。javascript
HTML 属于结构层,负责描绘出内容的结构。
复制代码
简单来讲,就是合适的标签作合适的事情,这样具备如下好处:css
简单来讲,能用
<header>
、<footer>
等 H5 新标签的就不用<div class="header">
,不要使用<div>
来存放段落等……html
行内元素和其余行内元素都会在一条水平线上排列,都是在同一行的;块级元素却老是会在新的一行开始排列,各个块级元素独占一行,垂直向下排列,若想使其水平方向排序,可以使用左右浮动(
float:left/right
)让其水平方向排列。前端
行内元素:a span i img input select b
等vue
块级元素:div ul ol li h1~h6 p table
等html5
空元素:br hr link
等java
浏览器内核又能够分红两部分:渲染引擎和JS引擎。webpack
浏览器 | IE | Chrome | Firefox | Safari |
---|---|---|---|---|
内核 | Trident | Blink(WebKit分支) | Gecko | WebKit |
header footer nav section article aside
等audio video
date
(从一个日期选择器选择一个日期) email
(包含 e-mail 地址的输入域) number
(数值的输入域) range
(必定范围内数字值的输入域) search
(用于搜索域) tel
(定义输入电话号码字段) 等localStorage,sessionStorage
SVG
绘图drag
Cookie | session | sessionStorage | localStorage | |
---|---|---|---|---|
生命周期 | 可设置失效时间,没有设置的话,默认是关闭浏览器后失效 | 存储于服务器端的数据。服务器会清理长时间不用的session | 仅在当前网页会话下有效,关闭页面或浏览器后就会被清除 | 除非被手动清除,不然将会永久保存 |
存储大小 | 4kb | 过多影响服务器会性能 | 能够保存5MB | 能够保存5MB |
Http请求 | 每次都会携带在HTTP头中,若是使用cookie保存过多数据会带来性能问题 | 存储于服务器端的数据 session 存储特定用户会话所需的属性和配置信息 | 仅在客户端(即浏览器)中保存,不参与和服务器的通讯 | 同sessionStorage |
区别:
src
用于替代这个元素,而href
用于创建这个标签与外部资源之间的关系git
<link href="style.css" rel="stylesheet/>
浏览器加载到这里的时候,html的渲染和解析不会暂停,css文件的加载是同时进行的<script src="script.js"></script>
当浏览器解析到这句代码时,页面的加载和解析都会暂停直到浏览器拿到并执行完这个js文件CSS 属于表示层,负责如何显示有关内容。
复制代码
css的盒模型由
content
(内容)、padding
(内边距)、border
(边框)、margin
(外边距)组成。但盒子的大小由content
+padding
+border
这几部分决定。box-sizing
是一个CSS3
属性,与盒子模型有着密切联系。即决定元素的宽高如何计算,box-sizing
有三个属性:github
box-sizing: content-box|border-box|inherit:
复制代码
content-box
中,整个 div的宽、高,则不包括上面元素。就是content
大小。border-box
中,整个 div 的宽、高,包括 margin、padding、border。计算方式content
+ padding
+ border
= 自己元素大小,即缩小了content大小。inherit
中, inherit 指定box-sizing属性的值,应该从父元素继承CSS 经常使用选择器
复制代码
CSS 选择器权重
!important
->行内样式
->#id
->.class
->元素和伪元
素 -> * ->继承
->默认
static
: 默认值。没有定位,元素出如今正常的流中relative
(相对定位):生成相对定位的元素,相对于其正常(原先自己)位置进行定位absolute
(绝对定位):生成绝对定位的元素,相对于static定位之外的第一个父元素进行定位fixed
(固定定位):生成绝对定位的元素,相对于浏览器窗口进行定位推荐文章:css position
margin
属性调整位置css
属性float:left/right/none
左浮动/右浮动/不浮动(默认)推荐文章:css float
display的几个经常使用的属性值,inline , block, inline-block
复制代码
推荐文章:css display
`px`和`em`和`rem`的区别
复制代码
px
: 像素,相对长度单位。像素px是相对于显示器屏幕分辨率而言的
em
的值并非固定的,会继承父级元素的字体大小,表明倍数
rem
的值并非固定的,始终是基于根元素 的,也表明倍数
BFC 就是 块级格式上下文,它是一个独立的渲染区域,让处于 BFC 内部的元素和外部的元素相互隔离,使内外元素的定位不会相互影响。
复制代码
必定的 CSS 声明能够生成 BFC,浏览器对生成的 BFC 有一系列的渲染规则,利用这些渲染规则能够达到必定的布局效果。
为何须要 BFC 呢?
如何产生 BFC?
工做中通常可能不会顾及这个:float 不多使用了,尽量使用 flex
推荐文章:我对BFC的理解
推荐文章:
一句话:回流必将引发重绘,重绘不必定会引发回流。
复制代码
当Render Tree
中部分或所有元素的尺寸、结构、或某些属性发生改变时,浏览器从新渲染部分或所有文档的过程称为回流。
当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility
等),浏览器会将新样式赋予给元素并从新绘制它,这个过程称为重绘。
border-radius
,阴影box-shadow
,边框图片border-image
text-shadow
,强制文本换行word-wrap
,线性渐变linear-gradient
transform:rotate(90deg)
,缩放scale(0.85,0.90)
,translate(0px,-30px)
定位,倾斜skew(-9deg,0deg)
;::selection
;@media
,多栏布局flex
transition
动画 animation
提供了一种css的书写方式,常见的就是 SAAS文档 和 LESS文档
复制代码
DNS解析
TCP三次握手
发送请求,分析url,设置请求报文(头,主题)
把请求回来的html代码 通过解析生成DOM树
解析css代码生成,生成样式树
结合DOM和style树生成渲染树
推荐文章:从输入url到页面加载完成发生了什么
location 对象:主要存储 url 相关信息
history 对象:浏览历史信息相关
- `history.go()` // 前进或后退指定的页面数 history.go(num);
- `history.back()` // 后退一页
- `history.forward()` // 前进一页
复制代码
navigator 对象:浏览器信息相关
- `navigator.userAgent`返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串)
- `navigator.cookieEnabled` // 返回浏览器是否支持(启用)cookie
复制代码
Http协议的特色
http状态码有那些?分别表明是什么意思 首先,咱们大体区分下状态码:
而后,常见的状态码:
200 OK
服务器成功处理了请求301/302 Moved Permanently
(重定向)请求的URL已移走404 Not Found
(页面丢失)未找到资源403
服务器拒绝请求408
(请求超时) 服务器等候请求时发生超时501 Internal Server Error
服务器遇到一个错误,使其没法对请求提供服务
http
: 是互联网上应用最为普遍的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP
),用于从WWW
服务器传输超文本到本地浏览器的传输协议,它可使浏览器更加高效,使网络传输减小
https
: 是以安全为目标的HTTP
通道,简单讲是HTTP
的安全版,即HTTP
下加入SSL
层,HTTPS
的安全基础是SSL
,所以加密的详细内容就须要SSL
http
是超文本传输协议,信息是明文传输,https
则是具备安全性的 ssl
加密传输协议http
和 https
使用的是彻底不一样的链接方式,用的端口也不同,前者是 80
,后者是 443
http
的链接很简单,是无状态的;HTTPS
协议是由 SSL+HTTP
协议构建的可进行加密传输、身份认证的网络协议,比 http
协议安全6种原始数据类型:
修改器方法:
访问方法:
迭代方法:
简单来讲,闭包就是可以读取其余函数内部变量的函数
function Person() {
var name = 'hello'
function say () {
console.log(name)
}
return say()
}
Person() // hello
复制代码
用途
最大用处有两个,一个是前面提到的能够读取函数内部的变量,另外一个就是让这些变量的值始终保持在内存中
注意点
因为闭包会使得函数中的变量都被保存在内存中,内存消耗很大,因此不能滥用闭包,不然会形成网页的性能问题,在IE中可能致使内存泄露
推荐文章:从闭包提及
每一个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance)都包含一个指向原型对象的内部指针.
原型示意图
原型链示意图
在 JavaScript 中,研究 this 通常都是 this 的指向问题,核心就是 this 永远指向最终调用它的那个对象,除非改变 this 指向或者箭头函数那种特殊状况
function test() {
console.log(this);
}
test() // window
var obj = {
foo: function () { console.log(this.bar) },
bar: 1
};
var foo = obj.foo;
var bar = 2;
obj.foo() // 1
foo() // 2
// 函数调用的环境不一样,所获得的结果也是不同的
复制代码
apply,call,bind做用:三者均可以改变 this 的指向
var obj = {
name : 'sss'
}
function func(firstName, lastName){
console.log(firstName + ' ' + this.name + ' ' + lastName);
}
func.apply(obj, ['A', 'B']); // A sss B
复制代码
var obj = {
name: 'sss'
}
function func(firstName, lastName) {
console.log(firstName + ' ' + this.name + ' ' + lastName);
}
func.call(obj, 'C', 'D'); // C sss D
复制代码
var obj = {
name: 'sss'
}
function func() {
console.log(this.name);
}
var func1 = func.bind(null, 'xixi');
func1();
复制代码
浅拷贝
...
深拷贝
推荐文章:JavaScript中的浅拷贝与深拷贝
JavaScript 是单线程语言
JavaScript 的 Event Loop 是 JS 的执行机制, 也就是事件循环
console.log(1)
setTimeout(function(){
console.log(2)
},0)
console.log(3)
// 1 3 2
复制代码
JavaScript 将任务分为同步任务和异步任务,执行机制就是先执行同步任务,将同步任务加入到主线程,遇到异步任务就先加入到 event table ,当全部的同步任务执行完毕,若是有可执行的异步任务,再将其加入到主线程中执行
setTimeout(function(){console.log(1);},0);
new Promise(function(resolve){
console.log(2);
for(var i = 0; i < 10000; i++){
i == 99 && resolve();
}
}).then(function(){
console.log(3)
});
console.log(4);
// 2 4 3 1
复制代码
在异步任务中,定时器也属于特殊的存在。有人将其称之为 宏任务、微任务,定时器就属于宏任务的范畴。
推荐文章: 这一次,完全弄懂 JavaScript 执行机制
ES6新增的特性
ES6 容许使用“箭头”(=>)定义函数
var f = v => v;
// 等同于
var f = function (v) {
return v;
}
复制代码
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.所谓Promise,简单说就是一个容器,里面保存着某个将来才会结束的事件(一般是一个异步操做)的结果 --ES6入门-阮一峰
在 MVVM 架构下,View 和 Model 之间并无直接的联系,而是经过 ViewModel 进行交互,Model 和 ViewModel 之间的交互时双向的,所以 View 数据会同步到 Model 中,而 Model 数据的变化也会当即反应到 View 上。
ViewModel 经过双向数据绑定把 View 层和 Model 层链接了起来,而 View 和 Model 之间的同步工做彻底是自动的,无需人为干涉,所以开发者只须要关注业务逻辑,不须要手动操做 DOM,不须要关注数据状态的同步问题,复杂的数据状态维护彻底由 MVVM 来统一管理。
M - Model。Model 表明数据模型,也能够在 Model 中定义数据修改和操做的业务逻辑。
V - View。View 表明 UI 组件,它负责将数据模型转化为 UI 展示出来。 VM - ViewModel。ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步 View 和 Model 的对象,链接 Model 和 View。
请大体讲下 Vue 的生命周期?
什么是 Vue 生命周期?
Vue 实例从建立到销毁的过程,就是生命周期。从开始建立、初始化数据、编译模板、挂载 DOM -> 渲染、更新 -> 渲染、销毁等一系列过程,称之为 Vue 的生命周期。
Vue 有几个生命周期,它们的做用主要是什么?
8 个,建立前/建立后、挂载前/挂载后、更新前/更新后、销毁前/销毁后。Vue 生命周期的做用是方便咱们经过它的生命周期,在业务代码中更好地操做数据,实现相关功能。
第一次页面加载会触发 Vue 哪几个钩子?
会触发 4 个生命钩子:建立前/建立后、挂载前/挂载后
DOM 渲染在哪一个周期就已经完成?
在 beforeMounted 时它执行了 render 函数,对 $el 和 data 进行了初始化,但此时仍是挂载到虚拟的 DOM 节点,而后它在 mounted 时就完成了 DOM 渲染,这时候咱们通常还进行 Ajax 交互。
微信小程序项目结构主要有四个文件类型
主要文件
小程序直接 this.data 的属性是不能够同步到视图的,必须调用:
this.setData({
// 这里设置
})
复制代码
使用全局变量实现数据传递 在 app.js 文件中定义全局变量 globalData, 将须要存储的信息存放在里面
// app.js
App({
// 全局变量
globalData: {
userInfo: null
}
})
复制代码
使用的时候,直接使用
getApp()
拿到存储的信息
使用
wx.navigateTo
与wx.redirectTo
的时候,能够将部分数据放在 url 里面,并在新页面onLoad
的时候初始化
//pageA.js
// Navigate
wx.navigateTo({
url: '../pageD/pageD?name=raymond&gender=male',
})
// Redirect
wx.redirectTo({
url: '../pageD/pageD?name=raymond&gender=male',
})
// pageB.js
...
Page({
onLoad: function(option){
console.log(option.name + 'is' + option.gender)
this.setData({
option: option
})
}
})
复制代码
须要注意的问题:
首先在全局 config 中的 window 配置 enablePullDownRefresh 在 Page 中定义 onPullDownRefresh 钩子函数,到达下拉刷新条件后,该钩子函数执行,发起请求方法 请求返回后,调用 wx.stopPullDownRefresh 中止下拉刷新
相同点:首先他们都是做为点击事件函数,就是点击时触发。在这个做用上他们是同样的,能够不作区分
不一样点:他们的不一样点主要是bindtap是不会阻止冒泡事件的,catchtap是阻值冒泡的
wx.navigateTo()
, wx.redirectTo()
, wx.switchTab()
, wx.navigateBack()
, wx.reLaunch()
的区别wx.navigateTo()
:保留当前页面,跳转到应用内的某个页面。可是不能跳到 tabbar
页面wx.redirectTo()
:关闭当前页面,跳转到应用内的某个页面。可是不容许跳转到 tabbar
页面wx.switchTab()
:跳转到 abBar
页面,并关闭其余全部非 tabBar
页面wx.navigateBack()
关闭当前页面,返回上一页面或多级页面。可经过getCurrentPages()
获取当前的页面栈,决定须要返回几层wx.reLaunch()
:关闭全部页面,打开到应用内的某个页面入口(entry)
- 入口起点(entry point)指示 webpack 应该使用哪一个模块,来做为构建其内部依赖图的开始
- 能够经过在 webpack 配置中配置 entry 属性,来指定一个入口起点(或多个入口起点)
复制代码
module.exports = {
entry: './path/to/my/entry/file.js'
};
复制代码
输出(output)
loader
插件(plugins)
模式
module.exports = {
mode: 'production'
};
复制代码
推荐文档:官方文档
推荐文章
在进军前端的路上,路遇蛋总,jsLiang等大佬的知识分享。因而乎也想整理一下本身这段时间学习的知识体系。
dog蛋 掘金-蛋总
jsLiang GitHub-jsLiang
RoaMan GitHub-RoaMan
不熬夜,晚安。