- JS没有块级作用域
- 只有全局作用域喝函数
作用域分为一下几种
- 自由变量
- 作用域链,即自由变量的查找
- 闭包的俩个场景
自由变量
1 var names = 'zhangsan'2 console.log(names) // zhangsan3 var num = 1004 function t(){5 var num = 2006 console.log(num) //2007 }8 t()
作用域链,即自由变量的查找
// 作用域链(一个变量不断的往父级找)var sd = 22function fg() { var s2 = 666 // 当前作用域没有定义的变量,即自由变量 console.log(s2) // 666 console.log(sd) // 22}fg()var w = 123function 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 = 99914 s1()15 16 function a1(){17 var w = 54318 return function(){19 console.log(w) //543 //自由变量,会在他的父作用域去找即ss函数20 }21 }22 var z = a1()23 function a2(parm){24 var w = 90025 parm()26 }27 a2(z)