文章目录
一、变量作用域
变量根据作用域的不同分为两种:全局变量和局部变量。
- 函数内部可以使用全局变量。
- 函数外部不可以使用局部变量。
- 当函数执行完毕,本作用域内的局部变量会销毁。
二、什么是闭包?
- 闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解:一个作用域可以访问另外一个函数内部的局部变量。
// fun 这个函数作用域 访问了另外一个函数 fn 里面的局部变量 num
function fn(){
let num = 10
function fun(){
console.log(num)
}
fun()
}
fn() //10
- 闭包的主要作用:延伸了变量的作用范围。
// fn 外面的作用域可以访问fn 内部的局部变量
function fn(){
let num = 10
// 方法一: 先定义再返回函数
function fun(){
console.log(num)
}
return fun //返回 fun函数
}
let f = fn()
f() //10
// fn 外面的作用域可以访问fn 内部的局部变量
function fn(){
let num = 10
// 方法二: 直接返回函数
return function(){
console.log(num)
}
}
let f = fn()
f() //10