前端面试题小五道
js高级知识内容
1.setInterval/setTimeout详解
setInterval(function(){
alert(1)
},1000)//一秒执行一次一直循环
setTimeout(function(){
alert(1)
},6000)//延迟6秒执行后停止定时器
2.批量添加事件(事件委托)
var stars = document.getElementsByTagName("i");
// 首先获取所有i标签
for (var i=0;i<stars.length;i++){
stars[i].index = i;
}
// 为每个标签添加自定义属性index,值为标签的key值
for (var i=0;i<stars.length;i++) {
stars[i].onmouseover = function(){
lightStars(this.index);
}
stars[i].onmouseout = function(){
offStars(this.index);
}
stars[i].onclick = function(){
alertStars(this.index);
}
}
//通过循环为每一个元素添加事件,注意的一点是,获取index值的时候,需要用this,而不是stars[i]。
3.闭包(本质,原理,构成,作用,缺点)
定义:闭包函数:声明在一个函数中的函数,叫做闭包函数。
闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。
特点:让外部访问函数内部变量成为可能;局部变量会常驻在内存中;可以避免使用全局变量,防止全局变量污染;
缺点:会造成内存泄漏(有一块内存空间被长期占用,而不被释放)解决方法是退出闭包时把不用内部的变量删除
闭包的创建:闭包就是可以创建一个独立的环境,每个闭包里面的环境都是独立的,互不干扰。闭包会发生内存泄漏,每次外部函数执行的时 候,外部函数的引用地址不同,都会重新创建一个新的地址。但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删除,保留一根指针给内部活动对象。
闭包内存泄漏为: key = value,key 被删除了 value 常驻内存中; 局部变量闭包升级版(中间引用的变量) => 自由变量;
例:
function sun(){
var a=10;
return function(){
alert(a)
}
}
var b = sun()
b()
4.作用域链
每一段 JS 代码(全局代码或函数)都有一个与之关联的作用域链。
这个作用域链是一个对象列表或者链表,这组对象定义了这段代码中“作用域中” 的变量。
当 JS需要查找变量 x 的值的时候,它会从链的第一个对象开始查找,如果这个对象有一个名为 x 的属性,
则 会直接使用这个属性的值,如果第一个对象中没有名为 x 的属性,
JS会继续查找 链上的下一个对象。
如果第二个对象依然没有名为 x 的属性,则会继续查找下一个,以此类 推。
如果作用域链上没有任何一个对象含有属性 x,那么就认为这段代码的作用域链上不存 在 x,
并最终抛出一个引用错误(ReferenceError)异常
5.匿名函数(本质,和普通函数的区别,调用方式)
匿名函数:如 var a=function(){ return 1 };
此函数function 没有函数名,但是它将值赋给了变量 a
普通函数: function abc(){ return 1 };
此函数声明了一个名为abc的函数。
以上简单理解,下篇作者会小小的说一下axios跨域,敬请关注