以后一二节课老大开会,所以上课调到3,4节课,前两节课是继续把我没有封装完的组件给封装完,并发到博客中了,今天开始就是带着我们复习js的东西,今天上午讲了一个闭包
函数和对其周围状态的引用捆绑在一起构成闭包,也就是说,闭包可以让你从内部函数访问外部函数作用域。在
JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。
闭包的优点:
可以避免全局变量的污染;缺点是闭包会常驻内存,增加内存使用量,使用不当很容易造成内存泄漏。
闭包有3个特性:
(1)函数嵌套函数。
(2)在函数内部可以引用外部的参数和变量。
(3)参数和变量不会以垃圾回收机制回收。
作用域链
作用域有全局作用域和局部作用域
var fn =233 //全局作用域
function fn2 () { //fn2的作用域
var a=100
}
一般情况下,变量取值到创建这个变量的函数的作用域中取值。但是如果在当前作用域中没有查,就会向上级作用域去查,直到查到全局作用域,
这么一个查找过程形成的链条就叫做作用域链。
this指向
this和作用域不一样,作用域是声明的时候就定下来了,this是在调用的时候才确定下来
1、默认绑定
function test() {
console.log(this) //this指向window
}
2、隐式绑定,谁调用指向谁
const obj = {
name:'joy',
getName(){
console.log(this); //this指向obj
console.log(this.name); //joy
}
};
obj.getName();
当然也可以通过call,apply,bind来改变this指向问题
现在也不会去考虑this问题,因为ES6出了一个箭头函数,调用前this是什么函数里面的this就是什么,常用的就是箭头函数
顺便也给我们说了一下运算符,我自己也总结了一下
var obj=1 || 2 && 3
console.log(obj)//1 因为与运算大于或运算,所以先计算与运算,2和3比,返回的3,因为与运算它是第一个
值如果
是true的话,就返回第二个值,或运算是第一个值如果是true的话,就返回第一个值,所以返回的是1
//相等运算符 ==
var num='1';
console.log(num==true)//true 因为true转换成数字类型是1所以相等
//!=
var count=3.1415926
console.log(count !=10)//true
//=== 全等 它跟相等类似,但是它不会自动转换类型,两个值得类型不同,直接返回false
console.log(null===undefined)//false
//三元运算符 我们可以通过它来实现我们点击内容样式切换的效果
<div class="{{idx==index?'active':''}}"></div>
条件表达式 语句1 语句2
如果表达式是true的话,就执行语句1,否则就执行语句2
晚上我也是继续接着昨天看了js对象的视频,我们组也是开了个会议,看了一下合并之后的项目,看了一下每个人封装组件的效果