6月1

153 阅读2分钟

今天早上背了面试题,因为背到网络这一块,不太好理解,背的也非常简单,毕竟不是专攻网络这块,所以理解不是很深,那今天老大突然说以后改到后两节上课,我对封装的组件有进行了一个理解, 老大今天主要讲了两个一个是闭包一个是this

闭包

最开始都认为闭包只是函数套函数,那么经老大这么一讲,也是颠覆了对闭包的认知,其实只要有一个函数+一个变量就形成了闭包 闭包特点: 闭包中自由变量长期驻留内存,长期驻留内存中的变量如果处理不当,会导致内存泄露,不用的话要将闭包置为null 可以隔离作用域,模拟块级作用域 当我们使用 计数器,改变页面字号,定时器累加,封装组件等可以用我们的闭包 当然老大出了一个问题

如何每隔1秒打印1,2,3,.....10?

刚开始我也是这样想的

  for(var i=1;i<=10;i++) {
        setTimeout(function() {
            console.log('i',i)
        },1000)
  }

但其实这样不对,他只会打印11个10,如何我们可以用let改变不重复,但是如果不用let, ex5怎么写,老大也是进行了一个讲解

  for(var i=1;i<=10;i++) {
     
     (function(j) {
        setTimeout(function() {
            console.log('i=j的值:',j)
        },2000*j)
     })(i)

  }

外边套一个函数就可以了

this

主要是这this指向问题,老大也是对所以场景进行了一个演示

1.在全局环境下:this===window===全局
2.在普通函数内:this === window
3.在构造函数内:this永远指向当前被实例化的对象
4.在对象中:简单来说谁调用指向谁
5.在dom中:指向自身
6.在定时器中:指向window
当然我们可以使用箭头函数改变this指向,或者在前面使用 vat that =this 改变
### 那么箭头函数与普通函数有什么区别?
箭头函数主要是没有this指向,this指向他的父级

最后老大抛出一个问题,谁调用this,this就指向谁?难道这句话真的正确吗? 老大也是用例子证明这句话是错误的

 var value='React';

   var obj={
       value:'Vuejs',
       getValue:function() {
           console.log(this===window)
           console.log(this.value);
       }
   }
  // obj.getValue();   // this===obj
 // console.log((obj.getValue)())   //this===obj
 //console.log((obj.getValue=obj.getValue)())  //this===window
 //console.log((false || obj.getValue)())   //this===window
 //console.log((false,obj.getValue)())    //this===window

后边三个都是指向window