变量作用域: 1、函数内部可以使用全局变量。 2、函数外部不可以使用局部变量 3、函数执行完毕,本作用域内的局部变量会销毁 浏览器垃圾回收机制: 当声明了一个变量并将一个引用类型值赋给该变量时,则该值的引用次数就是1; 如果同一个值又被赋给另一个变量,则该值的引用次数加1; 如果包含对该值引用的变量又取得了另外一个值,则该值的引用次数减1。 当该值的引用次数变为0时,则可以回收其占用的内存空间。 当垃圾回收器下一次运行时,就会释放那些引用次数为0的值所占用的内存。
闭包指有权访问另一个函数作用域中 变量 的函数------出处(红宝书)
翻译一下: 一个作用域可以访问到一个函数内部的局部变量
也就是:闭包是个函数,闭包是个可以访问另一个局部变量的函数
闭包主要作用:延长了变量的作用范围
闭包demo1: 最简单的,也是大多数人,用了却不认为是闭包,这个其实就是名副其实的闭包函数,fun这个函数作用域,访问了fn里面的局部变量num。完全符合闭包的定义,控制台可以看得到。
function fn() { var num = 10; function fun() { console.log(num) } fun() } fn() // 10
闭包demo2: 大多数闭包场景,
以前 fn()被调用完,num会被销毁,但是现在不可以,因为还有f等住调用num呢,
f也调用完了才会销毁num。
闭包带来的就是大量的内存消耗。
function fn() { var num = 10; function fun() { console.log(num) } return fun; } var f = fn(); f(); // 10 //这样也可以fn()()