js闭包、this指向问题

162 阅读2分钟

复习了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块级作用域