javascript进阶:作用域链

1.在页面写的代码都在全局作用域下,即window下的属性.
2.了解了解这个作用域在哪.
3.如果我用到了,它该如何去访问。

先看面试题

题目一

var a = 1
function fn1() {
  function fn2() {
     console.log(a)
  }
  function fn3() {
   var a = 4
   fn2()
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() //输出多少

注:当执行var fn = fn1 ()这行代码,就相当于把当前作用域的栈给压入就不去管它,我们进入到了另外一个空间,即fn1作用域下或者叫它的活动空间下或者叫fn1的可执行上下文下。进入后执行fn1内的代码。

题目二

var a = 1
function fn1() {
  function fn3() {
    var a = 4
    fn2()
  }
  var a = 2
  return fn3
}
function fn2() {
  console.log(a)
}
var fn = fn1()
fn() //输出多少

注:每当执行一个函数,它就进入了一个新的作用域下。
找的是变量的当前状态。

题目三

var a = 1
function fn1() {
  function fn3 {
    function fn2() {
      console.log(a)
    }
    var a
    fn2()
    a = 4
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() //输出多少

注:函数在执行过程中,先从自己内部找变量。即当你去使用一个变量或者给一个变量赋值的时候,那这个变量是从自己的作用域下找。
如果找不到,再从创建当前函数所在的作用域下去找,以此往上。
上层是指我当前这个函数在哪声明就在哪一层。

你可能感兴趣的:(javascript进阶:作用域链)