闭包和普通函数的自由变量取值
一句话:所有的自由变量的取值都是在函数定义的地方,向上级作用域查找,而不是函数执行的地方。
1.闭包
1 function create(){ 2 let a = 100 3 return function(){ 4 console.log(a) //自由变量定义的地方取值,没有就找上级 5 } 6 } 7 8 let fun = create() 9 let a = 200 10 fun() //100
2.普通函数
1 function print(){ 2 let a = 200 3 fn() 4 } 5 6 let a = 100 7 function fn(){ 8 console.log(a) //自由变量定义的定义,没有就找上级 9 } 10 11 fn() //100