1.闭包的优缺点
闭包的优点
可以重复使用变量,并且不会造成变量污染
可以用来定义私有属性和私有方法
闭包的缺点
比普通函数更占用内存,会导致网页性能变差,在IE下容易造成内存泄露
2.GET和POST的区别
1.GET在浏览器点后退按钮或者刷新按钮时是无害的,而POST会再次提交请求
2.GET可以被收藏为书签,而POST不能
3.GET能被缓存,而POST不能
4.GET请求只能进行url编码,而POST支持多种编码方式
5.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
6.请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制。
GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制,这个限制是特定的浏览器及服务器对他的限制
7.对参数的数据类型,GET只接受ASII字符,而POST没有限制
8.GET参数通过url传递,POST放在Request body中
9.GET数据在url中对所有人都是可见的,而POST的数据不会显示在url中
10.GET是用来向服务器获取信息的,请求报文传输的信息只是用于描述所需资源的参数,返回的信息才是数据本身
POST是用来向服务器传递数据的,其请求报文传递的信息就是数据本身,返回的报文只是操作的结果
GET和POST的本质都是TCP链接,并无区别,但是由于HTTP的规定以及浏览器/服务器的限制,导致它们在应用过程中可能会有所不同
3.原型和原型链
什么是原型
每个对象都会在其内部初始化一个属性,就是prototype(原型) 原型的作用是共享数据,节省内存空间
什么是原型链
访问一个对象的属性时,先在基本属性中查找,如果没有,就通过ptoto属性去原型对象上找,如果还找不到就通过原型对象
的proto属性去object原型上找,这个proto链称为原型链
特点:
JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
4.offset client scroll
offsetWidth返回自身包含padding+border+content的宽度
clientWidth返回自身包含padding+content的宽度
scrollWidth返回自身content的宽度
5.数组方法
1.push()向数组末尾推入新的元素,如果要添加多个元素,用逗号隔开
2.pop()删除并返回数组的最后一个元素
3.unshift()想数组开头添加新的元素,如果添加多个元素,用逗号隔开
4.shift()删除并返回数组的首个元素
5.splice(start,length,···)
start要删除的元素起始索引 length要删除的元素个数
···要添加的新元素,如果添加多个元素,用逗号隔开
6.reverse()颠倒数组的顺序
7.sort()数组排序
8.indexOf()查询某个元素在数组中第一次出现的位置
查到返回索引,查不到返回-1
9.concat()拼接数组
10.join(str)通过特定的字符 str 把数组连接成一个字符串
6.字符串方法
1.indexOf()查询特定字符在整个字符串中第一次出现的位置
2.lastIndexOf()查询特定字符在整个字符串中最后一次出现的位置
3.slice(start,end)
start要截取的字符串的起始索引,end要截取的字符串的结束索引
截到的字符串包含起始位置的字符,不包含结束位置的字符
end如果省略,代表从其实索引截到字符串结尾
start可以是负值,代表从右边数第几位
4.substring(start,end)
参数同上,注意start不能为负值
5.substr(start,length)
start 起始索引 可以为负值
length要截取的字符串长度,如果省略,则代表截到字符串的结尾
6.replace(str1,str2)
str1要被替换的字符,str2替换字符
7.split()用指定的字符,将字符串分割成数组
7.同源策略
同端口 8080 8181
同域名 www
同协议 http https
如果以上有任意一个不满足就会产生跨域
8.定时器
setInterval(调用函数,延时时间)
每隔这个延时时间,就去调用这个函数,一直重复
setTimeout(调用函数,延时时间)
延时时间到了,就去调用这个函数,只调用一次
延时时间单位为毫秒,如果省略,默认为0
clearInterval(定时器名字) clearTimeout(定时器名字)
9.DOM节点操作
1.创建
document.write createElement createTextNode innerHTML
2.增
appendChild insertBefore
3.删
removeChild
4.改 主要修改dom的元素属性
修改元素属性:src href title 等
修改普通元素内容: innerHTML innerText
修改表单元素: value type disabled等
修改元素样式:style className 等
5.查 主要查询获取dom元素
DOM提供的API方法:getElementById getElementByTagName ·····
H5提供的新方法: querySelector querySelectorAll
6.属性操作
setAttribute:设置dom的属性值
getAttribute:得到dom的属性值
removeAttribute 移除属性
10.事件流
1.事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流
2.捕获阶段:事件对象从window到目标父节点的传播阶段
3.目标阶段:事件对象到达目标。如果事件类型指定不冒泡,则事件对象将在此阶段完成后停止
4.目标阶段:事件流对象从目标节点到达window传播的阶段
11.时间委托是什么 为什么要用事件委托
1.利用事件冒泡的原理,让自己所触发的事件,让他的父元素代替执行
2.提高性能 新添加的元素还会有之前的事件
12.阻止默认行为
e.preventDefault()<br /> IE浏览器 e.returnValue=false<br />用return false 也能阻止默认行为,没有兼容性问题 特点:return后面的代码不执行了,而且只限于传统的注册方式
13.阻止冒泡
e.stopPropagation
e.cancelBubble=true
14.filter数组去重
var arr=[1,2,2,3,3,4,4,5,5];
var arr1=arr.filter((item,index,array)=>{
return array.indexOf(item)===index
})
15.在一个 DOM 上同时绑定两个点击事件:一个用捕获,一个用冒泡。事件会执行几次,先执行冒泡还是捕获
绑定了几个事件便执行几次
先执行捕获再执行冒泡