我相信大家都或多或少听过闭包函数,具体什么是闭包函数呢?
首先,我们先来看一段代码
var gloab
var a(){
var aa = 123
function b(){
var bb = 234
console.log(aa)
}
return b
}
var res = a()
res()
我们先来大胆做一下预测,这段代码执行的结果是 undefined还是123呢?想知道具体结果,我们耐着性子往下看(心急吃不了热豆腐)
想要完全搞清除闭包产生的原因,我们要先了解一个概念js的作用域特性
那么什么是js的作用域特性呢
接下来,我们继续解释上面这段代码,首先在执行var res 这个代码的时候,首先会产生全局GO对象
GO{
gloab: undefined
res: undefined
}
在执行res = a()的时候,GO对象发生了更新,与此同时产生了AO对象
GO{
gloab: undefined
res: [Function a]
}
[a函数的AO对象]
AO{
aa: undefined
b : [Function b]
}
当b函数定义的时候,它所能看到的是上面的AO和GO对象【也就是说:b函数是站在a函数的肩膀上看世界的】,接下来代码接着往下执行,随着b函数的定义,会产生b函数自己的AO对象
【b函数的AO对象】
AO{
bb: undefined 234
}
除了这个AO对象,上面说到,b函数还能看到a函数的AO对象,全局的GO对象
当执行到res()函数的时候,a函数的返回值也就是b函数,所以res() 也就相当于执行了a函数中定义的b函数
看到这里,我相信大家懂了闭包函数的产生原因
希望我的这些对大家有帮助,我也是一个正要入门前端的小白,如果过程中有什么说的不对的地方,希望大家指出来。
最后,期待疫情快快结束~~~