1、Macrotask 和 Microtask
Macrotask 和 Microtask 都是属于异步任务中的一种
· Macrotasks : setTimeout, setInterval, setImmediate, I/O, UI rendering
· Microtask : process.nextTick, Promises, Object.observe, MutationObserver
Mutation Observer(变动观察器)是监视DOM变动的接口。当DOM对象树发生任何变动时,Mutation Observer会得到通知。
在每一次事件循环中,macrotask 只会提取一个执行,而 microtask 会一直提取,直到 microtasks 队列清空。而事件循环每次只会入栈一个 macrotask ,主线程执行完该任务后又会先检查 microtasks 队列并完成里面的所有任务后再执行 macrotask
用处
可以看出 Macrotask 的优先级低于 Microtask ,那么 UI rendering 之前我们可以做很多数据上的处理,比如 Vue 使用 MutationObserver 可以处理完所有数据处理后再统一做 UI render
参考:
https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
2、取消事件的默认动作。
语法
event.preventDefault();
例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用
(事件冒泡顺序:由内至外,由子元素至父元素)
1.event.stopPropagation();
事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)
2.return false;
事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)
还有一种有冒泡有关的:
3.event.preventDefault();
如果把它放在头部A标签的click事件中,点击“点击我”。
会发现它依次弹出:我是最里层---->我是中间层---->我是最外层,但最后却没有跳转到百度
它的作用是:事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)
3、this指向;
4.回调函数
5、localstiorage大小,5M
Cookie大小
URL IE的话,最大的长度为2083字符,若是中文字符的话只有2083/9=231个
6、设计模式
7、|是前后两数转成二进制后相加的结果;||,如果为false则执行右边的语句
8、模块化的写法:
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
原始做法:"污染"全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。
9.立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有什么区别?
function foo() {...} // 这是定义,Declaration;定义只是让解释器知道其存在,但是不会运行。
foo(); // 这是语句,Statement;解释器遇到语句是会运行它的。
传统方法:
1. 传统的方法啰嗦,定义和执行分开写;
2. 传统的方法直接污染全局命名空间(浏览器里的 global 对象,如 window)
用经典的立即执行函数写法把所有代码包起来( 主要作用应该是避免污染全局变量,不暴露私有成员 ),一般jquery的插件都可以看到
10、JavaScript 内存泄漏:
http://www.ruanyifeng.com/blog/2017/04/memory-leak.html
11、avascript 严格模式
http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
12、arguments caller
13、String indexof array findIndex
14、传值太大会影响性能?
15、Js JSON.parse 严格要求json格式;key必须是双引号
如:JSON.parse(‘{ key: 1}’)报错
JSON.parse(‘{ “key”: 1}’)正确