12个前端开发面试问题整理
1.IE和标准DOM事件流的区别
一、IE的事件流叫事件冒泡,事件开始时由最具体的元素接受,然后逐级向上传播到document。
DOM的事件流包括三个阶段,事件捕获阶段、处于目标阶段、事件冒泡阶段,实际的目标在捕获阶段不会接收到事件。
二、IE中运行下列两个方法时的this指的是window,而DOM中this指的是当前元素。
三、IE指定和删除事件处理程序的方法为attachEvent()和detachEvent(),DOM中为addEventListener()和removeEventListener()。
四、IE中这两个方法的参数都要加on,比如onclick。而DOM中不用加on,为click。
2.IE和标准下有哪些兼容性的写法:
var event =event || window.event;
var target = event.target || event.srcElement;
阻止默认行为: event.preventDefault || event.returnValue=false;
阻止冒泡行为: event.stopPropagation || event.cancelBubble=true;
3.ajax请求的时候get和post方式的区别:
一、get方式用户能在URL中看到提交的数据,post不能看到。
二、对于get方式服务器端使用Request.QueryString来获取变量的值,对于post方法服务器端使用Request.form来获取变量的值
三、get传输数据量小,不大于2kb,post无限制
四、get安全性差、速度快,post安全性高、速度慢。
4.call和apply的区别:
apply的参数必须是数组或者Arguments对象。
5.ajax请求时,如何解释json数据
可以使用eval(),但是不推荐,有严重的性能问题和安全性问题。
可以使用JSON.parse(),推荐。
6.B继承A的方法:
//寄生组合式继承
function inherit(subType,superType){
var prototype = Object(superType.prototype)//创建对象
prototype.construcor =subType;//增强对象
subType.prototype=prototype;//指定对象
}
function SuperType(name){
}
function SubType(name,age){
SuperType.call(this,name);
this.age=age;
}
inherit(SubType,SuperType);
//组合继承
subType.prototype=new superType();
function subType (argument) {
superType.call(this,argument);
}
7.获取非行间样式的函数
// 获取非行间样式
function getStyle (obj,attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];//兼容IE浏览器
}else{
return obj.getComputedStyle(obj,null)[attr];//其他浏览器 obj后面的参数是伪类,比如:after,不需要就为null
}
}
8.事件委托是什么
利用事件冒泡,将自身事件交给父级元素来处理,这样可以提高页面性能。
比如将ul中li的onclick事件交个ul来处理。
9.闭包是什么,有什么特性,对页面有什么影响
闭包是有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,是在一个函数内部创建另一个函数。
闭包特性:function a(){
return function b(){}
}
a中有一个b函数。a返回b函数。这就是闭包。
函数b的存在会让,a函数执行并且返回b后,不会被js的垃圾回收机制所回收,因为b依赖a中的变量。
对页面影响:闭包函数比一般函数会占用更多内存,过度使用闭包可能会让内存占用过多。
10.添加 删除 替换 插入到某个接点的方法
- obj.appendChild() obj.removeChild() obj.replaceChild() obj.insertbefore()
11.jsonp和ajax的异同:
jsonp和ajax都是请求一个URL,然后把服务器返回的数据进行处理。
不同:ajax的核心是通过XMLHttPRequest获取非本页的内容,而jsonp是通过动态的创建script标签来调用服务器提供的js脚本
12.javascript的本地对象,内置对象和宿主对象
本地对象包括:number 、string、boolean、function、object、error、regexp、array等
内置对象:global、math
宿主对象:其余的所有包括document、window