闭包
1,函数的执行
封装定义
(1),创建一个内存空间,准备存储函数程序内容,操作系统,定义内存地址
(2),将函数程序,以字符串的形式,存储在 内存空间 中
(3),内存空间的 内存地址,赋值给变量或者函数名称存储
执行调用
(1),通过变量或者函数名称中存储的内存地址,找到存储空间
(2),调用其中存储的函数程序,赋值实参
(3),预解析/预解释
(4),调用执行函数程序
会在 函数的存储空间中 再独立创建一个 执行空间
专门 存储函数执行时,生成的变量以及程序内容
当函数执行完毕,执行空间就会被销毁,其中存储的内容,也会一起被销毁
2,闭包的基本概念
闭包是 JavaScript 函数的高级应用
作用是 可以直接调用函数中的定义的变量
根本目的:1,为了防止全局变量污染,将变量定义为局部作用域变量
2,为了可以调用存储在函数内部的局部作用域变量,使用闭包技术
3,生成一个不被销毁的存储空间
定义一个函数,返回的返回值,是一个引用数据类型
并且在函数外部有变量存储返回值
4,闭包的基本条件
有一个函数A,返回值是函数B
在函数B中调用使用函数A中的变量
在函数A外部,有变量存储函数A的return值,也就是函数B
function fun2(){
const obj = {
name:‘张三’,
age:18,
}
// return 返回的实际是,obj变量中存储的对象的内存地址
return obj;
}
// 变量 o 中 存储的 是 obj对象的内存地址
// 如果执行空间被销毁, obj 被销毁,o中存储的内存地址,就失去意义了
// 如果 函数的返回值 return 的是一个 引用数据类型的内存地址
// 并且 在函数之外,有其他的变量存储这个内存地址
// 函数的执行空间,就不会被销毁,就会一直存在
const o = fun2();
// 不会销毁的执行空间的存在条件
// 1,函数的返回值是一个引用数据类型
// 2,在函数外,有另一个变量,在存储返回值