js-作用链域

作者: 饥人谷_momo | 来源:发表于2018-07-04 21:16 被阅读29次

以前理解的作用链域

  • 函数在执行的过程中,首先从自身的函数作用域找变量;
  • 如果从自身内部找不到变量,就向上一层寻找变量,一直到全局变量为止;
  • 例子:
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
颜海静博客
汤姆大叔博客

  • 一系列活动的执行上下文(EC)形成了栈。栈底是全局上下文,栈顶是活动的当前上下文,压栈、出栈类似数组的pop以及push。
    压栈:全局EC-->局部EC1-->局部EC2-->当前EC
    出栈:全局EC<--局部EC1<--局部EC2<--当前EC
    当js代码被载入浏览器中时,默认进入的是一个全局的执行上下文。挡在全局上下文中调用执行一个函数时,程序流就进入被调用的函数内,此时引擎就会为函数创建一个新的执行上下文,并将其压入到执行上下文堆栈的顶部。浏览器总是执行在当前堆栈顶部的执行上下文,一旦执行完毕,该上下文就会被从当前堆栈弹出,然后,进入其下的上下文执行代码。这样,堆栈中的上下文就会被一次执行并且弹出堆栈,知道回到全局上下文。
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

结果:


代码结果
  • 第4处输出6,然后下面的a=20,将fn2上一层的a赋值为a(并不是全局的)
  • 第5处输出1,然后下面的a=200,将fn3上一层(也就是全局)的a赋值为200

相关文章

  • js-作用链域

    以前理解的作用链域 函数在执行的过程中,首先从自身的函数作用域找变量; 如果从自身内部找不到变量,就向上一层寻找变...

  • JS-作用域链

    什么是作用域链? 当代码在一个环境中执行时,都会创建一个作用域链。 作用域链的用途是保证对执行环境有权访问的所有变...

  • 作用域链和闭包

    在谈作用域链之前先说一下与作用域链关系紧密的执行环境和作用域。 作用域:作用域指的是变量的适用范围。 作用域链:作...

  • 作用域链

    作用域链 把多个作用域串起来便形成了作用域链;每个函数在初始化完成之后就拥有了各自的作用域链,但此时的作用域链中并...

  • web性能实践

    一. 作用域 前面我们了解作用域概念的以及作用域链是如何运作的。 随着作用域链中的作用域数量的增加,访问当前作用域...

  • js-作用域

    作用域 var 在函数里面生命的是局部变量,只能在函数里面作用 var 在函数外的是全局变量,整个文件都可以使用 ...

  • js-作用域

    自执行匿名函数——封闭空间 作用域: 全局变量:在哪里都能使用变量,生存周期长,直到浏览器关闭,占资源 局部变量:...

  • JS_0: 执行环境和作用域链

    JavaScript,目前对于执行环境和作用域链的理解 什么是作用域链? 要讲作用域链就得先讲执行环境。 每个函数...

  • js 总结七07-19

    作用域 全局 局部 作用域链 闭包

  • 作用域和闭包

    作用域链 (据我所知)所有的编程语言都存在作用域链。整个代码存在全局作用域、函数作用以及块级作用域。 上述代码将会...

网友评论

    本文标题:js-作用链域

    本文链接:https://www.haomeiwen.com/subject/izpyuftx.html