JavaScript闭包
为什么要使用闭包
正常函数将函数体内的代码执行完毕之后就会销毁掉这个函数空间
而且每调用一次函数就会开辟一个新的内存空间,新的内存空间与之前的内存空间是不受任何影响的。
所以调用一次x函数就会让a+1变成2,因为每次调用都会开辟一个新的内存空间,他们是不受任何影响的。所以再调用一次x函数就会再让a+1变成2。不管调用多少次结果都是2
function x(){
let a = 1;
function y(){
console.log(++a);
}
y()
}
x() //2
x() //2
x() //2
但是如果我们想要实现延伸函数作用域范围则需要用到闭包,换句话说就是让函数每次调用让a自加一
function x() {
let a = 1;
// 将这段代码返回
return function y() {
console.log(++a);
}
}
let aa = x();
aa() //2
aa() //3
aa() //4
以上操作将x的++a函数体返回给aa,然后调用。这样可以实现延伸作用域范围(闭包),使外面作用域访问函数内部作用域。由此每次调用函数就会访问到x函数体内部的y函数使a变量自加一。最终就实现了每调用一次就会让a自加一
看一下这个案例
function x() {
let a = 1;
return function y() {
let b = 1;
function z() {
console.log(++a);
console.log(++b);
}
z()
}
}
let aa = x();
aa() //a=2,b=2
aa() //a=3,b=2
aa() //a=4,b=2
这个案例函数体x里面只有a形成了闭包,所以每次调用只有a会自加一而b没有形成闭包所以不管调用多少次都是2
让a和b都形成闭包可以这么做
function x() {
let a = 1;
return function y() {
let b = 1;
return function z() {
console.log(++a);
console.log(++b);
}
}
}
let aa = x()();
aa() //a=2,b=2
aa() //a=3,b=3
aa() //a=4,b=4
希望明年能够实现月薪过万的目标,这也是我的目标 哈哈哈