上个例子
//(1)
var a = '全局变量a'
function firtFunction() {
console.log(a); //全局变量a
}
function secondFuntion() {
let a ='局部变量a'
firtFunction()
}
secondFuntion() //打印的 a==?
# 再举个栗子
//(2)
function outer() {
let num = 0
return function inner() {
num += 1
console.log(num);
}
}
var out = outer()
out() //1
out() //2
console.log(out); //这里是打印out函数 不是执行
// ƒ inner() {
// num += 1
// console.log(num);
// }
//第一个栗子的结果:在secondFuntion函数里面的firtFunction() ====>输出全局变量a
// 这里firtFunction()定义在了全局--所以执行的时候会去全局寻找变量a 定义的时候就决定了他的一生
//解释第2个栗子
**inner函数定义时所处的作用域在outer函数里,根据作用域链找到了outer函数里面定义的num**
所以当out函数执行的时候会调用inner函数(看上方outer函数打印),而inner函数使用的是他定义的时候就找到的
outer函数里面的num,所以会每次+1
突破点:实际上out()执行的时候执行的是inner()函数
//(类比 firtFunction定义在全局 它里面的a根据作用域链找到了全局a
// 那么即便secondFunction里面调用了firstFunction() 它依然是打印全局a。
//定义的时候就决定了他的一生)
附加:闭包三大条件:
1.函数嵌套
2.内部函数使用外部函数变量
3.内部函数作为返回值。