JS闭包
Posted winter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS闭包相关的知识,希望对你有一定的参考价值。
一、什么是闭包?
作用域应用的特殊情况(有两种):
函数作为参数被传递
函数作为参数被返回
1.函数作为参数被传递:
function print(fn){
let a = 200
fn()
}
let a = 100
function fn(){
console.log(a)
}
print(fn)
//100
2.函数作为参数被返回
function create(){
let a = 100
return function(){
console.log(a)
}
}
let fn = create()
let a = 200
fn()
//100
3.自由变量
什么是自由变量?
当前作用域没有定义但是使用了,需要我们去沿着作用域链查找的变量。
自由变量的查找规则?
在函数定义
的地方,向上级作用域查找,而不是执行的地方!!!
二、实际开发过程中闭包的应用
比如隐藏数据(做一个简单的cache工具)
function createCache(){
let data = {} //闭包中的数据,被隐藏,不被外界访问
return {
set(val, key){
data[val] = key
},
get(key){
return data[key]
}
}
}
let c = createCache()
c.set(\'a\', 100)
console.log(c.get(\'a\'))
//100(这样就只能通过c.get和c.set来访问和设置data, 而不能再函数外随意修改和获取data的值)
以上是关于JS闭包的主要内容,如果未能解决你的问题,请参考以下文章