- JS没有块级作用域
- 只有全局作用域喝函数
作用域分为一下几种
- 自由变量
- 作用域链,即自由变量的查找
- 闭包的俩个场景
自由变量
1 var names = 'zhangsan' 2 console.log(names) // zhangsan 3 var num = 100 4 function t(){ 5 var num = 200 6 console.log(num) //200 7 } 8 t()
作用域链,即自由变量的查找
// 作用域链(一个变量不断的往父级找) var sd = 22 function fg() { var s2 = 666 // 当前作用域没有定义的变量,即自由变量 console.log(s2) // 666 console.log(sd) // 22 } fg() var w = 123 function w1() { var v = 568 function w2() { var c = 300 // 没有的会不断像父级找 console.log(w) // 123 console.log(v) // 568 console.log(c) // 300 } w2() } w1()
闭包的俩个场景
1 // 闭包 2 // 1.函数作为返回值 3 // 2、函数作为参数来传递 4 5 function ss (){ 6 var e = 888 7 return function(){ 8 console.log(e) //888 // 自由变量,会在他的父作用域去找即ss函数 9 } 10 } 11 12 var s1 = ss() 13 var e = 999 14 s1() 15 16 function a1(){ 17 var w = 543 18 return function(){ 19 console.log(w) //543 //自由变量,会在他的父作用域去找即ss函数 20 } 21 } 22 var z = a1() 23 function a2(parm){ 24 var w = 900 25 parm() 26 } 27 a2(z)