Java教程

闭包

本文主要是介绍闭包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

闭包之前补几处个知识点:

变量作用域:
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()()
这篇关于闭包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!