1. js闭包
定义: 闭包就是能够读取其他函数内部变量的函数
作用: 读取其他函数内部变量的函数,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁
1.1 优劣势
优:可以让函数的局部变量保存在内存中,实现局部变量、数据共享
劣:
1.变量无法被回收,内存消耗大
2.闭包会在父函数外部,改变父函数内部变量的值(数据不安全)
2. 对象属性检测
2.1 in
propertyName in Obj
会从对象的实例属性、继承属性里进行检测
2.2 hasOwnProperty
obj.hasOwnProperty(propertyName)
只会检测本身是否包含指定属性,不会检测继承的属性
3. js this关键字
分类:
1. 当函数有所属对象时,函数内的this指向所属对象
2. 当函数没有所属对象时,this指向window对象
(以上俩点可以总结为:函数内部的this对象指向函数的调用者(拥有者))
3. 构造器中的 this:指向新对象,通过 new 关键词来调用构造函数,此时 this 会绑定在该新对象上
4. 如果构造函数返回一个对象,那么this指向函数本身
4. call和apply
call:
将函数指定到指定的作用域中执行(改变this的指向)
b.call(a); 解:通过在call方法,把函数b添加到a的作用域环境中执行(函数b中this指向a)
参数:
call(作用域,参数1,参数2....) 参数1,参数2....:被调用函数自身的参数
apply
作用与call一致
参数:
apply(作用域,[参数1,参数2....]) apply第二个参数为数组,存储函数自身的参数集合
4.1 注意点
当call和apply没有指明作用域时,默认会指向window