「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
这里讲一下前端js闭包的简单概念
就像一本书放在书包里面,那书包就是一个闭包,这个比如非常恰当,闭包的功能:1.在函数范围之外访问函数内部的值 ,2.保持引用,不被垃圾回收机制回收
我们才一段代码开始理解闭包
function a(){
b();
function b(){
c();
function c(){
console.log("我在里面");
}
}
}
a(); //我在里面
这里讲一下 JavaScript是单线程的 单线程的意思就是说一次只能做一件事情,这段代码就像薯片罐,一次吃一片最后到最底部 就是数据结构里面的--栈结构
想必大家都知道这段代码是不能执行的
function demo(){
var a = 111
}
demo();
console.log(a);
但是内部可以访问函数之外的变量
function demo(){
var a = 111
return function(){
console.log(a);
}
}
console.log(demo()); //这里我们返回的是个匿名函数
结论就是这个return返回的匿名函数,它就是主角。 “闭包”
但是我们怎么用这个闭包呢?很简单,我们来看一段代码
function demo(){
var a = 111
return function(){
console.log(a);
}
}
// console.log(demo()); //匿名函数
let _demo = demo();
_demo();//111
这样,在函数之外,我们就能访问这个函数变量,为什么呢? 我们知道简单数据类型是保存在栈里面的, function是一个复杂数据类型是保存在堆里面的,堆里面都保存这对象,对象是引用传递,这里demo()赋值给_demo(),_demo里面保存的是一个对这个匿名函数的地址引用
这就是闭包的简单概念!如果有什么说的不对的地方希望大家能指出来,再次感谢各位大佬