也来谈谈JavaScript的作用域链

每个编程语言都有作用域的概念,不管是C,C++,Java还是JavaScript,概莫例外!


作用域最主要的作用是访问空间的限制,也就是说,作用域内定义的变量或者函数,

只对该作用域或者其子子孙孙作用域可见,两个不是直系关系的作用域是无法直接访问其内部定义的变量和函数的


至于作用域是全局的,还是局部的,这个其实不是绝对的,因为任一作用域内定义的变量或函数对于其自身来说,都是局部的,但是对于直系子孙作用域来说,则是全局的


所以,从根作用域开始,到子孙作用域结束,这就像家谱一样组成了一个作用域链,每个作用域内变量或者函数的查找规则,就基于链式结构往上查的,直到根作用域为止,

那么查找具体是怎么做的呢?


对于强类型语言如C,C++和Java来说,变量的查找和确定在编译期就做了,也就是说,代码正式执行的时候,所有变量和函数的地址都已经确定(虚函数徐外)

这里重点讲JavaScript,JavaScript作为弱类型解释型语言,最大的优势就是灵活,那变量的查找当然也是动态查找最灵活


注意,下面是解释不是严格意义上ECMA标准协议的介绍,而是以一种比较通俗的方式来说明,这个要知晓。


我们都知道,JS的函数也是一个对象,一个用来描述函数代码的对象,详细可参考JavaScript原型和原型链新解


比如我们新建一个函数:

function test(){
  let var1 = 'harish';
  let var2 = 'heihei';
  let var3 = var1 + var2; 
}
test函数对象保存了函数执行所需的代码指令,以及代码执行过程中用到的变量名等等


有一点一定要了解,test对象保存的是静态代码以及相关资源数据,静态的!!!!

当test函数被执行的时候,其作用域内部的变量都是独立的,所以必须要创建一个运行时对象来动态的初始化并保存这些变量的数据,

这个对象被叫做函数的执行上下文(execution context):

text() -> execution-context.scope-chain:  index 0 : var1,var2,var3,this

                                                               index 1:  text所属parent函数的execution context


总结如下:

1:每一个函数调用,即作用域都会动态生成一个对应的execution context

2:这个函数的execution context对象中的scope chain中,index 0 保存为其作用域内定义的变量,以及this等,index 1保存为parent函数的execution context

3:函数内执行变量的查找,先从index 0对应的对象中查看是否存在,如果不存在,则跳到index1对应的parent函数的execution context中查找,依此类推,逐级向上,直到找到为止


作用域链就是这么回事,所以我们在开发中,要尽量避免某一变量在作用域链中过长的查找,这样肯定会影响性能


最后说下网上有朋友问的一个问题:

function test(){
  let var1 = 'harish';
  let var2 = 'heihei';
  let var3 = var1 + var2; 
}

test();

var tt = new test();
大体意思就是,直接调用test(), 跟new test()有什么区别?


如果按照java和c++的说法,就是一个是静态函数,一个是成员函数,一个execution context不包含this,一个execution context包含this,

就这么简单^_^





标题Python网络课程在线学习平台研究AI更换标题第1章引言介绍Python网络课程在线学习平台的研究背景、意义、国内外现状和研究方法。1.1研究背景与意义阐述Python在线学习平台的重要性和研究意义。1.2国内外研究现状概述国内外Python在线学习平台的发展现状。1.3研究方法与论文结构介绍本文的研究方法和整体论文结构。第2章相关理论总结在线学习平台及Python教育的相关理论。2.1在线学习平台概述介绍在线学习平台的基本概念、特点和发展趋势。2.2Python教育理论阐述Python语言教学的理论和方法。2.3技术支持理论讨论构建在线学习平台所需的技术支持理论。第3章Python网络课程在线学习平台设计详细介绍Python网络课程在线学习平台的设计方案。3.1平台功能设计阐述平台的核心功能,如课程管理、用户管理、学习跟踪等。3.2平台架构设计给出平台的整体架构,包括前后端设计、数据库设计等。3.3平台界面设计介绍平台的用户界面设计,强调用户体验和易用性。第4章平台实现与测试详细阐述Python网络课程在线学习平台的实现过程和测试方法。4.1平台实现介绍平台的开发环境、技术栈和实现细节。4.2平台测试对平台进行功能测试、性能测试和安全测试,确保平台稳定可靠。第5章平台应用与效果分析分析Python网络课程在线学习平台在实际应用中的效果。5.1平台应用案例介绍平台在实际教学或培训中的应用案例。5.2效果评估与分析通过数据分析和用户反馈,评估平台的应用效果。第6章结论与展望总结Python网络课程在线学习平台的研究成果,并展望未来发展方向。6.1研究结论概括本文关于Python在线学习平台的研究结论。6.2研究展望提出未来Python在线学习平台的研究方向和发展建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值