闭包和普通函数的自由变量取值

一句话:所有的自由变量的取值都是在函数定义的地方,向上级作用域查找,而不是函数执行的地方。

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

 

posted @ 2022-04-01 21:25  musicBird  阅读(46)  评论(0编辑  收藏  举报