复习了js基础,闭包和this指向问题,对于这两个问的话,之前都是有自己的了解的
闭包的话:
不一定是函数嵌套函数,它也可能是一个函数内部可以访问外部的变量或方法,就形成了闭包,
说到闭包的话,肯定首先要知道作用域链:
作用域链就是通过在当前函数内部查找需要的变量,如果找到了就使用 ,没找到就继续向上一级查找,如果有则访问,没有的话继续向上查找,知道找到为止 ,如果到window还没找到,就报错
闭包的特点:
函数嵌套函数,并且内部函数可以通过return返回的外部,外部可以访问内部函数的变量,也是形成了闭包
变量长期驻扎内存,可能会造成内存的泄漏溢出,所以在不适用闭包的时候,需要将闭包设置为null。
然后下午说了this的指向问题:
this指向的的话,之前自己的理解就是在函数中谁调用this就指向谁,但是这个说法呢也不算错,如果要从js深处了解的话,这个说法是有问题的。
在全局下 this===window的
在计时器中 this===window的
在普通函数中 this===window的
在构造函数中 this指向的是当前实例化对象
每隔一秒打印出0-5
如果是这样写的话输出来的是6个6,因为settimeout是异步操作,代码执行时候会将异步操作放到异步队列里面,当同步代码执行完成,然后在执行异步,所以i=6了
for(var i=0;i<=5;i++){
setTimeout(function(){
console.log(i) //这个的输的是6个6
})
}
//解决方案,
for(var i =0; i<=5;i++){
(function(i){
setTimeout(function(){
console.log(i)
},1000*i)
})(i)
}
//也可以利用es6所提供的let块级作用域