成员对象
1、window.event window.document window.history
2、window.screen window.navigator window.external
Window对象的属性如下
1、window//窗户自身
2、window.self //引用本窗户window=window.self
3、window.name//为窗户命名
4、window.defaultStatus//设定窗户状态栏信息
5、window.location//URL地址,配备布置这个属性可以打开新的页面
数据持久化技术(ajax)、简述ajax流程
1、客户端产生js的事件
2、创建XMLHttpRequest对象
3、对XMLHttpRequest进行配置
4、通过AJAX引擎发送异步请求
5、服务器端接收请求并且处理请求,返回html或者xml内容
6. XML调用—个calback()处理响应回来的内容
7、页面局部刷新
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
闭包
1、就是能够读取其他函数内部变量的函数。
2、堆栈溢出:就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了别的数据。经常会在递归中发生。
3、内存泄露是指:用动态存储分配函数内存空间,在使用完毕后未释放,导致一直占据该内存单元。直到程序结束。指任何对象在您不再拥有或需要它之后仍然存在。
造成内存泄漏
setTimeout的第一个参数使用字符串而非函数的话,会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
防止内存泄露
1、不要动态绑定事件;
2、不要在动态添加,或者会被动态移除的dom上绑事件,用事件冒泡在父容器监听事件;
3、如果要违反上面的原则,必须提供destroy方法,保证移除dom后事件也被移除,这点可以参考Backbone的源代码,做的比较好;
4、单例化,少创建dom,少绑事件。
自执行函数
1、声明—个匿名函数
2、马上调用这个匿名函数。
作用
创建一个独立的作用域。
好处
防止变量弥散到全局,以免各种js库冲突。隔离作用域避免污染,或者截断作用域链,避免闭包造成引用变量无法释放。利用立即执行特性,返回需要的业务函数或对象,避免每次通过条件判断来处理
场景
—般用于框架、插件等场景
html和xhtml的区别
HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的标记语言。
1、XHTML元素必须被正确地嵌套。
2、XHTML元素必须被关闭。
3、标签名必须用小写字母。
4、空标签也必须被关闭。
5、XHTML文档必须拥有根元素。
事件委托
利用冒泡的原理,把事件加到父级上,触发执行效果
好处
新添加的元素还会有之前的事件;提高性能。
节点类型
1、元素节点
2、属性节点
3、文本节点
4、注释节点
5、文档节点
判断当前节点类型
通过nodeObject.nodeType判断节点类型:其中,nodeObject为DOM节点(节点对象)。该属性返回以数字表示的节点类型,例如,元素节点返回1,属性节点返回2。
jq中get和eq的区别
get() :取得其中一个匹配的元素。num表示取得第几个匹配的元素,get多针对集合元素,返回的是DOM对象组成的数组eq():获取第N个元素,下标都是从0开始,返回的是一个JQuery对象
移动端上什么是点击穿透
点击穿透现象有3种
点击穿透问题
点击蒙层(mask)上的关闭按钮,蒙层消失后发现触发了按钮下面元素的click事件跨页面点击穿透问题:如果按钮下面恰好是一个有href属性的a标签,那么页面就会发生跳转另一种跨页面点击穿透问题:这次没有mask了,直接点击页内按钮跳转至新页,然后发现新页面中对应位置元素的click事件被触发了
解决方案
1、只用touch
最简单的解决方案,完美解决点击穿透问题
把页面内所有click 全部换成 touch事件( touchstart 、'touchend'、'tap')
2、只用click
下下策,因为会带来300ms延迟,页面内任何一个自定义交互都将增加300毫秒延迟
3、tap后延迟350ms再隐藏mask
改动最小,缺点是隐藏mask变慢了,350ms还是能感觉到慢的
4、pointer-events
比较麻烦且有缺陷,不建议使用mask隐藏后,给按钮下面元素添上pointer-events: none;样式,让click穿过去,350ms后去掉这个样式,恢复响应缺陷是mask消失后的350ms内,用户可以看到按钮下面的元素点着没反应,如果用户手速很快的话—定会发现