作用域链、函数执行上下文、全局执行上下文

function a(){
    function b(){
    function c(){}
    c();
    };
    b();
}
a();

a defined -->a[[scope]]-->[0]:GO

a doing    -->a[[scope]]-->[0]:aAO

             [1]:GO

b defined -->b[[scope]]-->[0]:aAO

               [1]:GO

b doing   -->d[[scope]]-->[0]: bAO

              [1]:aAO

              [2]:GO

c defined -->c[[scope]]-->[0]:bAO

               [1]:aAO

            [2]:GO

c doing -->c[[scope]]  -->[0]:cAO

           [1]:bAO

           [2]:aAO

           [3]:GO

c over  -->b[[scope]]  -->[0]:bAO

           [1]:aAO

           [2]:GO

b over  -->a[[scope]]  -->[0]:aAO

           [1]:GO

a over

     



原文地址:https://www.cnblogs.com/jokes/p/9197997.html

时间: 2024-10-09 02:10:01

作用域链、函数执行上下文、全局执行上下文的相关文章

javascript 作用域链及闭包,AO,VO,执行环境

下面的文章内容会根据理解程度不断修正. js变量作用域: 定义:变量在它申明的函数体以及函数体内嵌套的任意函数体内有定义. function AA(){ var bb='我是AA内部变量'; function TT(){ alert(bb); } alert(bb); TT(); } AA(); 如上图,两次弹出的都是“我是AA内部变量”. JS的变量作用域是函数级的,也就是在AA内部申明的变量,在AA内部任意位置,包括它嵌套的函数内也是有定义的. 在函数AA外面,bb就是没有定义的.当然如果去

(好文推荐)一篇文章看懂JavaScript作用域链

闭包和作用域链是JavaScript中比较重要的概念,首先,看看几段简单的代码. 代码1: 1 var name = "stephenchan"; 2 var age = 23; 3 function myFunc() { 4 alert(name); 5 var name = "endlesscode"; 6 alert(name); 7 alert(age); 8 alert(weight); 9 } 10 myFunc(); 11 myFunc(); 上述代码

javascript 执行环境,变量对象,作用域链

前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体. 通过上网查资料,特来总结,以备回顾和修正. 要讲的依次为: EC(执行环境或者执行上下文,Execution Context) ECS(执行环境栈Execution Context Stack) VO(变量对象,Variable Object)|AO(活动对象,Active Object) scope chain(作用域链)和[[scope]]属性 EC 每当控制器到达EC

深入理解javascript中执行环境(作用域)与作用域链

相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行环境分为全局执行环境和局部执行环境,其中局部执行环境我们又可以称之为函数执行环境.那么究竟什么使执行环境呢?通俗的说,执行环境即为代码执行时所处的环境.我们下来看一看如下代码,再进一步分析之. 1 2 3 4 5 6 7 8 9 10 11 <script><br>var name="zhuzhenwei"; functio

js的执行环境和作用域链

执行环境 js的执行环境就是:定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个环境都有一个与之相关联的对象,环境中定义的变量和函数都保存在这个对象中. 全局变量就是最外围的环境,通常被认为是window对象.全局变量和局部变量会在环境栈中,当执行环境在执行完环境中的所有代码后会销毁,环境栈会将该栈弹出,定义的变量与函数也会被销毁,而全局变量会在程序退出后销毁. 作用域链 作用域是保证对执行环境有权访问  的所有变量  的有序访问. 链的形成: 作用域链的前端是当前执行环境的变量对象

函数的作用域链的理解

1.作用域(scope):在javascript没有块级作用域,是由函数来划分的.变量和函数的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域(with和eval除外).当定义了一个函数,当前的作用域链就保存起来,并且成为函数的内部状态的一部份.在最顶级作用域链仅由全局对象组成,而不和词法作用域相关,然而,当定义一个嵌套的函数时,作用域链就包括外面的包含函数.这意味着嵌套函数可以访问包含函数的所有参数和局部变量.尽管当一个函

函数之闭包的基础----作用域链

理解闭包我觉得需要事先了解下面的概念和知识: 作用域(链),变量对象(活动对象),执行环境. 依次解释概念: 作用域:我们知道变量的 作用域就是程序源代码中定义这个变量的区域.(犀牛书)分为 全局作用域 和 局部作用域.(重复之前的:函数参数也是局部变量,它们只在函数体内有定义.)函数定义是可以嵌套的,所以就会有函数作用域. 函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的.就是说,在函数体定义了一个变量,这个变量在这个函数体内始终有定义,并且,嵌套在该函数里的嵌套

函数作用域及作用域链

变量作用域 全局作用域 在JavaScript中全局变量的作用域比较简单,它的作用域是全局的,在代码的任何地方都是有定义的.然而函数的参数和局部变量只在函数体内有定义 1.函数外面定义的变量拥有全局作用域 var n =2; function fn() { var a= 1; return a; } console.log(fn())//1 console.log(n)//2 console.log(a)//报错 error 2未定义直接赋值的变量自动声明为拥有全局作用域 var n =2; f

JavaScript---闭包和作用域链

作用域和作用域链: 参考文章 :http://www.cnblogs.com/malinlin/p/6028842.html  http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html  http://www.zhangyunling.com/?p=134 总结:  ① js中处处是对象 ②函数执行时会创建一个执行环境和变量对象 ③代码在执行环境中运行 变量对象会按照顺序存到作用域链中 ④执行一次函数就

JavaScript 作用域链解析

JavaScript 中有 Scope( 作用域 ) , Scope chain( 作用域链 ) , Execute context( 执行上下文 ) , Active Object ( 活动对象 ),Dynamic Scope( 动态作用域 ) , Closure( 闭包 ) 这些概念,要理解这些概念,我们从静态和动态两个方面去分析一下. 首先我们写一个简单的 function 来做一个例子: function add(num1, num2){ var sum = num1 + num2; r