- 1、浏览器怎么渲染页面(浏览器输入网址按下回车之后发生了什么)
- 2、commonjs 和 es6 模块化
- 3、redux(数据流)
- 4、详解JS深拷贝与浅拷贝
- 5、两个等号和三个等号差别,比如比较类型转化怎么做的
- 6、节流和防抖
- 7、301/302等状态码等常见状态码
- 8、promise then是微任务 .catch呢
- 9、深拷贝json.parse(Json.stringify())能拷贝function吗,缺点
- 10、什么时候会引起内存泄漏
- 11、怎么实现没修改文件的时候从缓存中获取,修改才获取最新文件
- 12、git分支一般多少
- 13、如何处理递归内存溢出
- 14、taro在不同平台的实现原理
- 15、type和interface区别
- 16、对于本地多个版本node怎么管理
- 17、redux中connect的作用
- 18、ES5如何实现块级作用域
- 19、什么时候会用到闭包
- 20、react的bind方法作用
- 21、如何带领团队
- 22、module.exports和export的区别
- 34、–save和–save-dev区别
- 35、如何自己实现new
- 36、如何实现bind
- 37、如何复制prototype原型链上的方法
- 38、如何实现onmouseout事件以及onkeyup事件
- 39、pwa以及实现
- 40、层叠样式
- 41、z-index
- 42、bem
- 43、mvc和mvvm区别
1、浏览器怎么渲染页面(浏览器输入网址按下回车之后发生了什么)
1、键盘或触屏输入URL并回车确认
2、URL解析/DNS解析查找域名IP地址
3、网络连接发起http请求
4、HTTP报文传输过程
5、服务器接收数据
6、服务器响应请求
7、服务器返回数据
8、客户端接收数据
9、浏览器加载/渲染页面
10、打印绘制输出
2、commonjs 和 es6 模块化
前端科普系列-CommonJS:不是前端却革命了前端 CommonJs和ES6 module的区别是什么呢
CommonJs是一种模块规范,最初被应用于nodejs,成为nodejs的模块规范
运行在浏览器端的 JavaScript 由于也缺少类似的规范,在 ES6 出来之前,前端也实现了一套相同的模块规范 (例如: AMD),用来对前端模块进行管理。
自 ES6 起,引入了一套新的 ES6 Module 规范,在语言标准的层面上实现了模块功能,而且实现得相当简单,有望成为浏览器和服务器通用的模块解决方案。但目前浏览器对 ES6 Module 兼容还不太好,我们平时在 Webpack 中使用的 export 和 import,会经过 Babel 转换为 CommonJS 规范。在使用上的差别主要有:
1、CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
2、CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
3、CommonJs 是单个值导出,ES6 Module可以导出多个
4、CommonJs 是动态语法可以写在判断里,ES6 Module 静态语法只能写在顶层
5、CommonJs 的 this 是当前模块,ES6 Module的 this 是 undefined
3、redux(数据流)
首先dispatch一个action
然后reducer会收到这个action,根据这个action对状态进行处理
状态修改后会被处理容器捕捉到
从而对相关界面进行更新
4、详解JS深拷贝与浅拷贝
5、两个等号和三个等号差别,比如比较类型转化怎么做的
6、节流和防抖
防抖:
对于短时间内连续触发的事件(比如滚动事件),防抖的含义就是让某个时间期限内,事件处理函数只执行一次。
节流:
如果短时间内大量触发同一事件,那么在函数执行一次之后,该函数在指定时间内不再工作,直到过了这段时间才重新生效。
防抖和节流常用情景:
1、搜索框input事件,可以使用节流方案
2、页面resize事件,因为只需要判断最后一次变化状况,可以使用防抖
7、301/302等状态码等常见状态码
301与302都是重定向。也就是说原来访问的url跳转到另一个url上。
其中:301是永久重定向,302代表暂时性重定向
8、promise then是微任务 .catch呢
Promise 的处理程序(handlers).then、.catch 和 .finally 都是异步的,都是微任务。
9、深拷贝json.parse(Json.stringify())能拷贝function吗,缺点
[详解JS深拷贝与浅拷贝](https://www.jb51.net/article/192518.htm
不能
10、什么时候会引起内存泄漏
1、闭包
2、意外的全局变量 (为避免这个问题可以在文件开头添加'use strict';)
3、定时器定时器setTimeout setInterval(当不需要setInterval或者setTimeout时,定时器没有被clear)
11、怎么实现没修改文件的时候从缓存中获取,修改才获取最新文件
1、给修改的文件添加版本号,比如是js文件:
<script type="text/javascript" th:src="@{/js/test/index.js(v=#{js.version})}"></script>
12、git分支一般多少
13、如何处理递归内存溢出
1、添加错误判断语句,对错误进行判断
2、限制递归次数
14、taro在不同平台的实现原理
15、type和interface区别
type是定义类型别名的关键字,通常用于定义联合类型,原始类型等等,比如封装axios请求中method类型
定义就可以用type关键字,而接口不可以。
接口可以合并,比如定义多个同名接口它们会合并到一个,而 type 不可以。
因此,通常我们描述对象的单个数据结构可以用 interface,如果描述的对象有多种数据结构的可能,我们可以定义多个接口用联合类型,然后用 type 给这个联合类型定义一个别名。
16、对于本地多个版本node怎么管理
17、redux中connect的作用
作用:连接React组件与 Redux store。
18、ES5如何实现块级作用域
使用立即执行函数
(function(){
var a = 1;
})();
19、什么时候会用到闭包
希望某些变量常驻内存中的时候
20、react的bind方法作用
为了在回调函数中使用this,不然那个this就是undefined
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn: true};
// 为了在回调中使用 `this`,这个绑定是必不可少的
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(state => ({
isToggleOn: !state.isToggleOn
}));
}
render() {
return (
<button onClick={this.handleClick}>
{this.state.isToggleOn ? 'ON' : 'OFF'}
</button>
);
}
}
ReactDOM.render(
<Toggle />,
document.getElementById('root')
);
21、如何带领团队
22、module.exports和export的区别
module.exports公开了它指向的对象
exports公开了它指向的属性
34、–save和–save-dev区别
--save安装并添加条目到package.json文件的dependencies。
--save-dev安装并添加条目到package.json文件的devDependencies。
区别主要是:
devDependencies通常是开发的工具(例如测试的库),而dependencies则是与生产环境中应用程序相关。