1.闭包
闭包指有权访问另一个函数作用域中变量的函数,创建闭包最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部。
闭包的特性:
1>.函数内再嵌套函数
2>.内部函数可以引用外层的参数和变量
3>.参数和变量不会被垃圾回收机制回收
2.浏览器事件模型,如何获得资源dom节点?
浏览器存在三种事件模型:
1>.原始事件模型(被所有浏览器所支持)
2>.DOM2事件模型(除了IE以外的所有主流浏览器支持)
3>.IE事件模型
浏览器事件分为三个阶段:
1>.事件捕获阶段
2>.目标阶段
3>.事件冒泡阶段
DOM节点获取方法:
1>.通过id属性获取document.getElementById()
2>.通过name属性获取document.getElementsByName()
3>.通过标签名获取document.getElementsByTagName()
4>.通过class属性获取document.getElementsByClassName()
5>.原生js中的querySelector和querySelectorAll方法也同样可以获取到相应的dom节点,相似于jquery,但比jquery更快
3.简述ECMAscript6的新特性
1>.增加块作用域
2>.增加let、const
3>.解构赋值
4>.函数参数扩展
5>.增加class类的支持
6>.增加箭头函数
7>.增加模块和模块加载
8>.math,number,string,array,object增加新的API
4.Apply和call方法的异同
相同点:
两个方法产生的作用是完全一样的,第一个参数都是对象。
不同点:
call( )方法参数将依次传递给借用的方法作参数,即fn.call(thisobj,arg1,arg2,arg3...argn),有n个参数
apply( )方法第一个参数是对象,第二个参数是数组fn.apply(thisobj,arg),此处的arg是一个数组,只有两个参数。
5.在JavaScript中什么是伪数组,如何将伪数组转化为标准数组
伪数组符合的条件:
1>.具有length属性
2>.按索引方式存储数据
3>.不具有数组的push,pop等方法
伪数组:
无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push、pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用document.getElementByTagName,document.childNodes之类的,它们返回的NodeList对象属于伪数组。
伪数组转化为Array对象
function makeArray(c){
try{
returm Array.prototype.slice.call(c);
}catch(e){
var ret=[ ],i,len=c.length;
for(i=0;i<len;i++){
ret[i]=(c[i]);
}
return ret;
}
}