函数
函数 定义 和 调用
js
函数定义的时候
1.在栈内存中开启一个空间
2.将函数内部的代码 复制到 这个空间中
3.将这个空间的地址,赋值给函数名
函数调用的时候
1.按照函数名内部的地址,去堆内存中寻找对应的代码 (我们默认寻找到函数了)
2.在调用栈中开启一个空间(我们叫做执行空间)
3.在执行空间进行形参赋值
4.在执行空间进行预解析
5.在执行空间内执行函数内部的完整代码
6.当函数执行完毕后,关闭/销毁 执行空间
function fn() {
}
fn()
如何创建一个 不会销毁的执行空间
js
在JS 中 如果想要拥有一个永远不会销毁的执行空间
那么 只需要 在函数内部返回一个引用数据类型,并且 在函数外部要有变量保存这个函数内部的
一个返回出来的引用数据
如果你以后不需要这个执行空间了,那么只需要 将外部 的 变量更改一个引用地址就行
js
<script>
function fn() {
const obj = {
name: '张三',
age: 18
}
return obj
}
let res = fn()
console.log(res)
res = null
console.log(res)
</script>
闭包
js
书写闭包,需要创建一个不会撤销的内存空间
需要 直接/间接 返回一个函数
内部函数,需要访问外部函数内创建的局部变量
优点: 延长了变量的使用时间
缺点:每一个闭包都会创建一个不会撤销的内存空间
如果闭包书写太多,那么这个被撤销的空间就越来越多
就会造成页面/程序的卡顿
js
<script>
function outter() {
const str = '我是 outter 函数内部创建的变量'
function inner() {
console.log(str)
}
return inner
}
const res = outter()
res()
</script>