闭包
所以闭包会使本来该被销毁的作用域链,由于被外部函数引用,所以此内部函数的作用域链就没有销毁
1、满足以下两个条件,才形成闭包
a、函数内部嵌套函数,嵌套的内部函数引用外部的标识符(数据)
b、内部函数被外部调用(返回嵌套的内部函数)
function box1() {
let a = 0;
function box3() {
console.log(a);
}
return box3;
}
let box2 = box1();
box2()
为什么使用闭包
1.解决无法使用内部变量、函数、数组…(延长变量的使用范围)
2.解决全局变量污染的问题(变量私有化)
function f69() {
let index = 0;
return function f68() {
console.log(index++);
}
}
let cc = f69()
cc();
cc();
cc();
自由变量
函数内部使用外部的变量,这个变量就是自由变量
注:跨作用域的变量都是自由变量,即变量的使用和声明不在同一个作用域
let i = 0;
function f70() {
let j = 2
function f71() {
let k = 5;
console.log(i + j + k);
}
}