如何理解作用域

  1. JS没有块级作用域
  2. 只有全局作用域喝函数

作用域分为一下几种

  1. 自由变量
  2. 作用域链,即自由变量的查找
  3. 闭包的俩个场景

自由变量

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)
原文地址:https://www.cnblogs.com/chailuG/p/11260102.html