回顾函数
函数执行空间:
1、函数执行完被销毁空间
2、函数执行完不被销毁空间
当函数体代码返回一个复杂数据类型,赋值给变量f时,调用栈空间不会被销毁
闭包
闭包是javascript语法现象,是函数的高级用法
-
闭包形成条件: (熟记并背诵)
-
有一个A函数,在A函数内部返回一个B函数
-
在B函数内部,访问A函数内部私有变量
-
在A函数外部,有一个变量引用返回的B函数
-
有函数嵌套,内层函数被返回
-
内层函数访问外层函数私有变量
-
返回的内层函数被引用
闭包形成后: -
生成一个不会被销毁的函数执行空间,
-
内部函数叫做外部函数的闭包函数
<script>
// 1. 函数嵌套外层函数
function fun() {
let num = 100 // 3. 内层使用外层函数变量
// 内层函数
return function(){
console.log('num :',num)
}
}
let f = fun() // 2. 外部引用返回的内层函数
let f1 = fun()
f()
</script>
</body>
-
闭包作用:
1. 形成不被销毁的执行空间,延长变量生命周期, 缺点,容易引起内存泄露,(执行多次,内存吃不消) 2. 外部可以访问内部函数的变量- 变量作用域扩展 ;没有形成闭包前:只能内部函数访问外层函数变量 3. 调用栈形成的是块作用域,互不影响,可以定义私有变量
闭包三种写法
-
显示写法
-
隐示写法
这里的B其实和return 返回是一样的效果 -
自调用函数
闭包的应用
闭包实现点赞功能:
以前:
采用调用函数:
自调函数写法(推荐)
柯里化函数
柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编程语言。
柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)©。
柯里化不会调用函数。它只是对函数进行转换。