闭包
- 函数运行时形成一个私有的封闭的空间,这就是一个闭包,闭包是一种机制。
- 封装性
- 保护的作用,防止里面的内容和外界冲突和覆盖
闭包的几种形式
- 自执行函数
- 将函数外的值传到函数内部:传参是为了拿到外面的值
- 将函数内的值传到函数外:window.a = 函数内部定义的变量值
- 函数的返回值是一个小函数
- 利用预处理的思想:先提前在fn大函数中,先提前处理公有的内容,等到return后面小函数运行时会用到提前处理的内容
- 自执行函数内部返回对象(高级单例模式)
- 解决了公有和私有的问题
var utils = (function () {
var name = 'lili';
function login() {
console.log("login")
}
function register() {
console.log('register')
}
return {
login:login,
register:register,
name
}
})();
console.log(utils.name); //lili
utils.login(); //login
utils.register();//register
复制代码
let和var区别
- let没有变量提升
- 在当前作用域下,es6中不允许重名变量
const和var区别
- const没有变量提升
- 在当前作用域下,const中不允许重名变量
- const 不允许重新赋值
作用域销毁
-
全局作用域
- 页面关闭时销毁
-
私有作用域
- 正常情况:方法运行完之后,作用域销毁。——立即销毁
- 1.当一个函数返回另一个函数时,这个函数不会立即销毁,等返回这个小函数运行完后,函数A才销毁。 ——这种叫不立即销毁
- 2.当函数内部的内容被外界占用,那么这个函数就不销毁了。
-
作用域不销毁的优缺点
- 缺点:会占用内存
- 优点:上次操作的结果被保存下来,下次操作可以用上次的结果
堆内存的销毁:
- 如果堆内存的引用地址被变量给占用了,这时堆内存不会销毁,只有没有变量指向这个堆内存时,浏览器会在空闲时回收这块内存,这称为垃圾回收机制。(标准浏览器下的回收机制)
this
- 1.看方法名前有没有点,若没有则this是window,若有点,点前是谁this就是谁
function fn() {
console.log(this);
}
var obj = {
num:20,
fn:fn
}
obj.fn();//obj
fn();//window
复制代码
- 2.自执行函数的this是window
- 3.事件绑定函数的this是绑定的元素