前端学习笔记

js-作用链域

2018-07-04  本文已影响29人  饥人谷_momo

以前理解的作用链域

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

1 首先从fn()执行的函数fn3;
2 fn3里面定义了var a=4;然后执行了fn2()
3 fn2()打印了a,但是fn2内部并没有定义a,所以向上一层,在fn1里面寻找到a为2;

经过查找资料得到的理解

gitbook
segmentFault
颜海静博客
汤姆大叔博客

var a = 1;

function fn(){
  console.log("1 "+a); //undefined
  var a = 5;
  console.log("2 "+a);  // 5
  a++;
  var a;
  fn3();
  fn2();
  console.log("3 "+a); //6

  function fn2(){
    console.log("4 "+a); // 6
    a = 20;
    console.log("8 "+a);
  }
  console.log("9 "+a);
}

function fn3(){
  console.log("5 "+a) //1
  a = 200;
  console.log("7 "+a) //1
}

fn();
console.log("6 "+a); //1

结果:


代码结果
上一篇 下一篇

猜你喜欢

热点阅读