闭包的概念:有权访问其他函数的内部变量的函数
闭包是作用域运用的特殊场景。注:js中自由变量的查找是在函数定义的地方向上级作用域查找,不是在执行的地方。
闭包的使用场景概况为两种,一种是函数作为参数被传递,一种是函数作为返回值被返回
1、函数作为返回值被返回
let xx = 10
function func1(){
let xx = 100
return function(){
console.log(xx)
}
}
let func2 = func1()
func2()
2、函数作为参数被传递
let xx = 10
function fn1(fn){
let xx = 100
fn()
}
function fn(){
console.log(xx)
}
fn1(fn)
3、定时器传参
function func(n){
return function(){
console.log(n, '一秒钟后打印的数据')
}
}
setTimeout(func(100), 1000)
以上两个例子,可以帮助理解【js中自由变量的查找是在函数定义的地方向上级作用域查找,不是在执行的地方】