阅读前须知
你必选要了解函数作用域,如果不了解可以在本站搜索
闭包到底是个啥玩意,为啥总是neng不清,这一次俺让你彻底彻底neng清楚
先来个最简单的代码
let i = 0;
function f() {
i++;
return i;
}
console.log(f());// 1
console.log(f());// 2
console.log(f());// 3
console.log(f());// 4
console.log(f());// 5
ok,你可以看到函数f内引用了一个变量i,思考一下每次调用f函数的时候发生了什么?
如果我把这段代码用函数包裹起来呢?为了防止混淆,我们一步步来
1.包裹函数并且返回
function c(){
let i = 0;
return function f() {
i++;
return i;
}
}
2.取消具名函数,返回匿名函数即可
function c(){
let i = 0;
return function () {
i++;
return i;
}
}
3.接收返回值,执行代码
let f = c();
看一下最终的代码
function c(){
let i = 0;
return function () {
i++;
return i;
}
}
let f = c();
console.log(f());// 1
console.log(f());// 2
console.log(f());// 3
console.log(f());// 4
console.log(f());// 5
和最初的代码相比,有哪些变化?
1.变量i放到了函数内,你无法在函数外继续访问到此变量了
2.但是你可以在函数c的返回值,即内部的匿名函数访问到此变量
3.函数c执行完并没有被销毁,因为它内部的变量i被f引用了,所以每次执行f()时,i的值都会发生变化并且保存起来
实际上,闭包就是函数作用域特性的一种表现形式,每个函数执行时都可以称之为闭包,只不过有的函数没有被销毁而已。
最后:忘记闭包,记住函数作用域
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!