趣解:函数作用域、执行上下文

2018.03.06
#

1、故事背景

阿猿是张家界的人,这一年上高三,计划考上北京大学,去北京念书。

  • 知识类比:如果‘阿猿’比喻为‘函数’的话,张家界这个区域可以类比为‘函数作用域’。就是他出生(定义)的时候,他的出生地就已经固定了。(备注:es5 是函数作用域,es6才开始有了块作用域。)

2、故事发展:

这一年的高考阿猿考的很不错,结果考上了北京大学,不久后就接到了录取通知书。8月底阿猿父亲准备开车送他去北京上学,阿猿提前准备了东西(包括衣服鞋子,吃的、书等)。

  • 知识类比:如果把‘录取通知书’类比为‘函数调用’,那么‘阿猿做的准备工作’就可以类比为‘执行上下文’。(问题1:在“准备工作”中完成了哪些工作?)

3、故事发展

阿猿到了北京大学,将录取通知书给老师查看之后,确定阿猿就是本人。就带着阿猿到宿舍,阿猿把行李拆开,摆放东西。

  • 知识类比:‘阿猿拆开行李’就类比‘执行上下文环境被销毁’。整个‘调用’过程,结束。

总结:

1、问题1:在“准备工作”中完成了哪些工作?

  • 变量、函数表达式——变量声明,默认赋值为undefined;
  • this——赋值;
  • 函数声明——赋值;
    这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。

2、函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域。如何理解?如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。又如何理解?

阿猿在张家界出生的时候,阿猿的出生地就已经固定了(就是张家界)。之前说把‘阿猿’类比为函数,‘函数体内部自由变量’类比于‘父亲准备的北京大学奖金’(这个奖金只有考上北京大学,才能使用),这个奖金的的作用域肯定也就在张家界了。

要找到阿猿的出生地张家界区域内的‘父亲准备的北京大学奖金’。唯一的办法,就是获取一个‘北京大学录取通知书’。阿猿在准备行李的时候,只要把‘北京大学录取通知书’这个调用拿出来,就能获取‘父亲准备的北京大学奖金’的值,。说这么多,也就是说要获取作用域下变量的值,必要要在调用函数的时候,进入执行上下文才能获取。

3、函数每被调用一次,都会产生一个新的执行上下文环境。如何理解?

  • 阿猿高考结束后,被‘调用’到北京大学读书,他做的准备的工作(书本、衣服鞋子、准备认识新同学)。
  • 阿猿大学毕业之后,被‘调用’到上海工作,他做的准备工作(被子、正装皮鞋)。
  • 总结:通过这个类比,是不是看到,在‘调用’的时候,阿猿就要做一个新的‘准备工作’。所以:函数每被调用一次,都会产生一个新的执行上下文环境。

2018.03.06 有些类比不是很恰当,之所以这么类比,也是希望对小伙伴们有用,因为作用域和执行上下文,确实不好理解。哪里有不正确的地方,请指出哦。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值