千锋教育JavaScript全套视频教程(10天学会Js,前端javascrip

概念:闭包就是能够读取其他函数内部变量的函数
语法:function fn(){
// 属于fn函数的私有变量
let a = 10
// 把这个a返回给外界,但是是通过函数返回的
return function(){
// 使用了fn函数的私有变量
console.log(a)
}
}
// 在外界使用变量接收了返回出来的函数
let res = fn()
res()
闭包面试题:function fun(n, o) {
console.log(o)
const obj = {
fun: function (m) {
return fun(m, n)
}
}
return obj
}
var res = fun(0) // 执行是全局的fun n = 0 o // undefined
// res 就是obj这个对象 执行的时候 形成了闭包 n 变量缓存起来了 n = 0
// 执行空间1
// console.log(res)
res.fun(1) // fun 就是对象里面的fun m = 1
// 里面会执行 return fun(m,n) 执行就是全局的fun(1,0)
// 打印 0
// 执行空间2 n = 1
res.fun(2) // fun 就是对象里面 fun m = 2
// 里面会执行 return fun(m,n) 执行就是全局的fun(2,0)
// 执行空间3
res.fun(3)
// var b = fun(0).fun(1).fun(2).fun(3)
// var res = fun(0) // undefined // 执行空间1 n = 0
// var res1 = res.fun(1) // ===> fun(0).fun(1) // 0 执行空间2 n = 1
// var res2 = res1.fun(2) // == fun(0).fun(1).fun(2) // 打印1 执行空间3 n= 2
var c = fun(0).fun(1) // undefined 0
// c.fun(2) // 1
// c.fun(3) // 1