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