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() //输出多少

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容