update: rename

This commit is contained in:
qianguyihao
2021-05-16 19:54:02 +08:00
parent a0dd8f9261
commit d59af98199
9 changed files with 13 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
## 前端代码规范-推荐资料
### JS规范重点推荐下面这两个
1Airbnb JavaScript Style Guide
- 英文原版https://github.com/airbnb/javascript
- 中文版https://github.com/lin-123/javascript
2clean code JavaScript
- 英文原版https://github.com/ryanmcdermott/clean-code-javascript
- 中文版1https://github.com/alivebao/clean-code-js
- 中文版2https://github.com/beginor/clean-code-javascript
### eslint规范
1eslint-config-airbnb
https://www.npmjs.com/package/eslint-config-airbnb
https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb
2凹凸实验室的eslint规范
https://www.npmjs.com/package/eslint-config-o2team-wx
备注o2team-wx 这一套规则是参考了 StandardJS Airbnb JS 规范然后结合业务中的最佳实践整理输出的
### 其他相关资料
1百度前端团队-前端各类规范集合https://github.com/ecomfe/spec
2The mother of all demo appshttps://github.com/gothinkster/realworld
3JavaScript 代码规范https://github.com/standard/standard/blob/master/docs/README-zhcn.md
### 参考链接
文案编程Git 风格规范汇总https://www.bihell.com/article/130
githubStarshttps://blog.teefing.top/posts/2019/05/27/githubstars.html
## 其他链接
- <http://blog.lovebug.cn/details/html/page02.html>
- <https://github.com/ecomfe/spec>
- <https://juejin.im/post/5e3d0362e51d4526d87c605d>
- <https://juejin.im/post/592d4a5b0ce463006b43b6da>
- <https://juejin.im/post/5b67e49551882508603d1431>
- <https://juejin.im/post/5e1abeede51d453c913c340e>
- <https://juejin.im/post/5d5d5197518825237330552d>
- <http://alloyteam.github.io/CodeGuide/>

View File

@@ -0,0 +1,8 @@
## JavaScript 书籍
###

View File

@@ -0,0 +1,31 @@
## Vue 开发积累
### 001scoped 关键字的作用
`xx.vue` 组件中我们可能会遇到带 `scoped` 关键字的样式比如
```html
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
```
上方的`scoped`表示的是**作用域化**样式只对当前子组件生效

View File

@@ -0,0 +1,25 @@
### 前端实战开发的各个方面
前端实战开发包括很多方面比如
- 跨终端技术体系
- 前端监控体系
- 多终端可视化页面搭建体系
- 前端性能优化体系
- 具体业务的架构设计
- 前端通道建设
- 搭建前端工程化技术体系
- 网站前端基础架构升级
- 研发日PV达千万的超大流量前端项目
- W3ctechD2FEDAY等技术大会中发表主题演讲
- 分享前端性能优化方面的经验和见解

View File

@@ -0,0 +1,25 @@
## JS相关
- JS装饰器
## 性能相关
- 防抖和节流
- 滚动穿透
## 样式相关
- 多行文字截断
## others
noop() 方法

View File

@@ -0,0 +1,241 @@
几道面试题
## 页面布局
### 如何实现一个三栏布局要求两边固定宽度中间自适应
此题可以考察的知识点
- 圣杯布局
- 双飞翼布局
- flex布局css3
### 让元素垂直居中
**方式一**如果宽高已知可以利用绝对定位
**方式二** translate 位移来做在宽高未知的情况下也可以这样做
```css
div {
background-color: red;
position: absolute; 绝对定位的盒子
top: 50%; 首先,让上边线居中
transform: translateY(-50%); 然后利用translate往上走自己宽度的一半【推荐写法】
}
```
**方式三**flex 布局
```css
parentElement{
display: flex;/*Flex布局*/
display: -webkit-flex; /* Safari */
align-items: center;/*设置子元素在侧轴方向上的布局*/
}
```
参考链接
- <https://www.zhihu.com/question/20543196>
- [水平垂直居中方案与flexbox布局](https://www.cnblogs.com/coco1s/p/4444383.html)
## 变量提升
**问题**说一下你对JavaScript变量提升的理解
**定义**
在函数体内部声明变量会把该变量提升到函数体的最顶端注意**只提升变量声明不赋值**
**代码1**
```javascript
fn();
function fn() {
var x = 1;
var y = 2;
}
```
上方代码中
1给fn创建函数上下文找到fn中**所有**用var声明的变量即x和y
2将这些变量初始化为undefined
3将x赋值为1将y赋值为2
**代码2**
```javascript
fn2();
function fn2() {
console.log(2);
}
```
上方代码中
1创建全局上下文找到所有用function声明的变量在环境中创建这些变量
2将这些变量**初始化****赋值** `function(){ console.log(2) }`并不是undefined
3开始执行代码`fn2();`
**代码3**let的出现
```javascript
{
let x = 1
x = 2
}
```
上方代码中
1找到所有用 let 声明的变量在环境中创建这些变量
2开始执行代码注意现在还没有初始化
3执行 x = 1 x 初始化 1这并不是一次赋值如果代码是 let x就将 x 初始化为 undefined
4执行 x = 2 x 进行赋值
代码4
```javascript
let x = 'global'
{
console.log(x) // Uncaught ReferenceError: x is not defined
let x = 1
}
```
原因有两个
- console.log(x) 中的 x 指的是下面的 x而不是全局的 x
- 执行 log x 还没初始化所以不能使用也就是所谓的暂时死区
看到这里你应该明白了 let 到底有没有提升
- let 创建过程被提升了但是初始化没有提升
- var 创建初始化都被提升了
- function 创建初始化赋值都被提升了
参考链接
- [我用了两个月的时间才理解 let](https://zhuanlan.zhihu.com/p/28140450)
### this
问题下方代码的打印结果是什么
```javascript
function A() {
this.name = 'smyhvae';
}
A.prototype.test = function () {
setTimeout(function () {
console.log(this.name);
}, 1)
}
var a = new A();
a.test();
```
打印结果是window.name但实际的结果是空的
这个神奇的特性被用来解决跨域数据传递网上可以查一下iframe相关
**总结1**this永远指向**函数运行时所在的对象**而不是函数被创建时所在的对象**谁调用**指向谁
**举例**
```javascript
var name = '全局';
function getName() {
var name = '局部';
return this.name;
};
alert(getName());
```
上方代码的打印结果是`全局`
分析`getName()`这个函数其实是window调用的所以this指向的window因为外部有name这个变量所以打印结果为`全局`
**总结2**没有明确的当前对象时this永远指向window这个在setTimeout里比较常见
### applycallbind的区别
## 链式调用
**问题**如何实现类似jQuery的链式调用
答案一直return `this`就好了
## Yslow和pageSpeed
Yslow和pageSpeed你知道怎么用吗你记得其中多少规则
## DNS的查询时间
**问题**前端怎样拿到DNS的查询时间
### H5中的方法performance.timing
window.performance这个api可以用来做前端性能监控其中timing这个方法
参考链接
- <https://github.com/fredshare/blog/issues/5>

View File

@@ -0,0 +1,34 @@
## 前言
要监控的内容
- 业务数据
- 稳定性
- 性能
- 错误
- 用户操作路径
怎么监控
- PV/UV业务操作上报
- 根据上报寻找异常
- 将页面性能数据上报
- 将页面产生错误上报
- 跟踪用户操作路径

View File

@@ -0,0 +1,37 @@
## 前言
数组在实战开发中使用得相当频繁前端同学通过接口拿到json数据后往往需要把数据进行各种形式的变换和展示这个时候数组的常见操作就发挥了很大的作用
如果你对数组的基础知识不太熟悉建议回去看看`03-JavaScript`的基础知识
掌握了基础知识之后我们再来看看实战开发中数组都有哪些常见操作
## 数组的常见操作
### 从对象数组中将属性的值提取为数组
一般人可能会想着通过 for 循环进行遍历但这种做法不够简洁
最佳答案
```javascript
const arr1 = [
{ skuId: "123", name: "商品1" },
{ skuId: "456", name: "商品2" },
{ skuId: "789", name: "商品3" }
];
const skuIdArr = arr1.map(item => item.skuId); // 将数组 arr1 中的 skuId字段提取为一个新的数组
console.log(JSON.stringify(skuIdArr));
```
打印结果
```json
["123","456","789"]
```
- 参考链接<https://codeday.me/bug/20170426/12102.html>