daibin0809
daibin0809
* 利用事件冒泡实现。指定一个事件处理程序,就可以管理某一类型的所有事件。 * 事件冒泡会冒泡到 document层,在需要点击的元素的父节点或更高层元素添加事件处理程序进行事件处理,能够减少事件的绑定。
* 闭包:闭包是函数和声明该函数的词法环境的组合。函数声明时能够访问的局部变量,在调用时仍然能够访问。闭包可以理解为,定义在一个函数内部的函数。 * 作用: 1.能够获取其他函数内部的变量; 2.让这些变量一直保存在内存中。
1.es6 的 `set`; ``` js Array.from(new Set(arr)) ``` 2.利用 `includes`; ``` js arr = [1,2,3,4,4,3,2,1] let result = []; for(const item of arr){ if(!result.includes(item)){ result.push(item); } } ``` 3. 利用...
* var与let/const的区别 1. `var`声明在在方法内为全局变量,声明在方法外为局部变量;`let/const`无法声明为全局变量。 2. `var`存在变量提升,在赋值前为`undefined`;`let`存在暂时性死区,块级作用域中使用了`let`声明就会'绑定'区域,声明前不能使用;`const`声明时必须赋值。 3. `var`不存在块级作用域;`let/const`存在。 4. for循环中计数变量为`var`时,只存在一个变量;`let/const`每次循环都是一个新的变量,与循环体为不同作用域。 5. `var`可重复声明,`let/const`在作用域中不允许重复声明。 * let与const的区别 1. const声明时必须赋值。 2. const声明后不可改变。不可改变指的是地址,而不是值。
## 浅拷贝与深拷贝 * 浅拷贝赋值引用地址,修改值会影响原始值(若属性的值未原始类型可能不会影响,依拷贝方法而定); * 深拷贝引用类型会重新创建一个对象,不会影响原始值; ## 浅拷贝 * 直接赋值; * 任何操作都会影响原数组; ``` let obj2 = obj1; ``` * Object.assign; * 拷贝属性值,假如属性值是一个对象的引用,那么也会指向那个引用; ``` let obj2 = Object.assign({},obj1); ``` * Array.prototype.concat();...
1.`script` 标签中增加 `async` 和 `defer` 属性; * `defer`属性:异步下载文件,按照顺序执行带有`defer`的属性的`script`标签;在文档渲染完毕后,`DOMContentLoaded`之前执行; * `async`属性:先加载完先执行;执行时,会阻塞文档渲染; 2.动态创建 `script` 标签; 3.父窗口插入 `iframe` 元素,在 `iframe` 中加载js; 4.`document.write`; 5.`XHR Injection` 方式。创建 `script` 元素插入到 DOM 结构中,ajax 请求成功后设置 `script.text`; 6.`XHR eval`...
* 数组扁平化 ``` function flattenDeep(arr,result=[]){ if(arr.constructor !== Array || arr.length
1. display: none; 2. visibility: hidden; 3. opacity: 0; 4. z-index; 5. position: absolute; 6. height: 0;overflow: hidden; 7. transform: scale(0); ...不知道了=
# XSS ## 介绍 * Cross-Site Scripting(跨站脚本攻击),是一种代码注入攻击。为了区别 CSS,改成 XSS。 * 本质:恶意代码混入正常代码中,浏览器无法分辨,导致恶意代码被执行。 ## 分类 * 存储型 * 将恶意代码提交到网站的数据库中,当用户打开网站时,服务器端取出恶意代码拼接在 HTML 中,用户浏览器解析执行时,恶意代码也被执行。 * 常见于留言、评价等。 * 反射型 * 将恶意代码放在 URL 中,网站服务器从 URL 中获取数据将获取到恶意代码拼接在 HTML...