什么是虚拟dom?捕获事件流是什么?
1、ܚ全面理解虚拟DOM,实现虚拟DOM 的 超级简单概括:
因为dom操作慢且复杂,但是js快,所以先用js渲染出虚拟的dom树1,在将dom树一渲染到页面上为真实dom树2。
然后想对dom的任何改动,先生成虚拟dom树2,先和虚拟dom树1作对比,这个对比的常规算法复杂度为O(n3)。对比中将改动的部分标记(包括属性,内容文本,替换(该标签),删除),最后一步修改。
那么
如何标记?
如何修改?
如何标记?
加入needchange为一个需要改动的数组;
needchange.push({ type: REPLACE, node: newNode });改变
needchange.push({ type:REORDER,moves:changObj});新增
needchange.push({ type: TEXT,content: newNode});改文本
needchange.push({ type:PROPS,props: newProps});改属性
如何修改?
按照四种分类做不同的处理;进行最小化dom修改;
比如只修改了class那么,就只改class而不重新渲染整个dom节点。
具体文章详解:www.ituring.com.cn/article/211352

2、这样来理解vue官方的demo:
<template v-if="loginType === 'username'">
<label>Username</label>
<input placeholder="Enter your username">
</template>
<template v-else>
<label>Email</label>
<input placeholder="Enter your email address">
</template>
两个 input切换只切换placeholder 不切换 用户输入
js对比dom树时检测到两个节点的标签一样位置一样而只是属性改了,所以只改placeholder

3、ܚxss攻击是什么??
Vue官方文档说:动态渲染任意HTML,易导致XSS攻击。
那么什么是“xss攻击”??
首先命名由来:
跨站脚本攻击(Cross-Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,所以将跨站脚本攻击缩写为XSS。
原因:
XSS漏洞的产生原因是Web应用未对用户提交请求的数据做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“>”、“<”),并将未经转义的恶意代码输出到第三方用户的浏览器解释执行。
目前的浏览器:
测试在chrome上没有测出这个问题。
据说新浪之前遇到此等攻击。

4、捕获事件与冒泡事件均为DOM事件流。
如果在以下五个dom节点都加一个click事件,那么响应顺序为:
冒泡事件:(视浏览器而定)从子到父
从div --body--html -- document --window
捕获事件与之相反:从父到子
从 window-- document--html --body--div
而所有的事件都会:
从window捕获事件到window的冒泡事件结束,绕一圈;
从父到子再从子到父走一遍

5、问:那么如何绑定或者区分冒泡或者捕获事件?
答:原生的addEventListener(event,fn,useCapture)的第三个参数,
true表示事件捕获,
false表示事件冒泡。
问:那么阻止冒泡或者捕获事件?
答:阻止默认事件:preventDefault();
阻止冒泡、捕获事件:stopPropagation()
IE:阻止冒泡:cancelBubble = true;
在捕获阶段stopPropagation();那么后面的冒泡和捕获都不会执行
问:默认的点击事件是什么事件?
答:默认的点击事件只有到了冒泡阶段时候的 target==currentTarget才绑定click事件;为什么?因为浏览器都兼容冒泡。
讲的非常细致的具体示例:cnblogs.com/Chen-XiaoJun/p/6210987.html
图片来自此文

6、有问题:留言
有用:投票
谢谢!!以上
