码迷,mamicode.com
首页 > Web开发 > 详细

JS高级 -- 执行上下文与作用域链

时间:2016-08-08 00:37:54      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

这个问题涉及到三个点:
     1. 执行上下文
  
     2. 函数嵌套导致的执行上下文栈

     3.闭包

1
<script> 2 var a = 1; 3 var f1 = function(){//第一个函数 4 var a = 2; 5 var b = 1; 6 7 var f2 = function(){//第二个函数 8 var c = 1;
9 var f3 = function(){//第三个函数
               //第三个函数执行,他自己的执行上下文中没有a,b,c,则从父级函数f2的执行上下文中去找,f2中有c,但是没有  a b,
               //继续去f2的父级函数f1的执行上下文中去找,找到了 a b ,所以结果是 2,1,1
10 console.log(a,b,c);//2,1,1 11 } 12 f3(); 13 } 14 f2(); 15 console.log(a,b);//2,1 16 console.log(c);//报错:c 未定义 17 } 18 f1();
         //f1执行,产生执行上下文,执行上下文中有 a b 所以 console.log(a,b)结果是 2,1
         //但是没有c,所以去f1的父级函数(全局执行上下文)中找,还是没有c,那么console.log(c)就报错


按照栈中的顺序展示执行上下文内容

---------------------f3函数执行上下文------------------------------
    变量:

    函数
-----------------------------------------------------------------

---------------------f2函数执行上下文------------------------------
    变量: c = 1;

    函数: f3;
-----------------------------------------------------------------
---------------------f1函数执行上下文------------------------------
    变量: a = 2 b = 1;

    函数: f2;
------------------------------------------------------------------
---------------------全局执行上下文---------------------------------
    变量: a = 1

    函数 f1;
------------------------------------------------------------------
19</script>



概念: 

  1.  全局代码(一打开这个页面,就会执行的代码)一执行,就会产生一个 "全局执行上下文", 有且只有一个

  2.  函数代码一执行,                 就会产生一个"函数执行上下文" ,可以有多个

  3.  执行上下文中存放的是代码中的 "变量" 和 "函数";他们是代码执行的原料

 

  4. 执行上下文会提供代码运行时需要的各个数据的值

  技术分享

 

  5.  函数嵌套调用形成执行上下文

  技术分享

        技术分享

 

  

JS高级 -- 执行上下文与作用域链

标签:

原文地址:http://www.cnblogs.com/jiangnanxidao/p/5747608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!