手机版

关于JS管理范围的问题

时间:2021-11-21 来源:互联网 编辑:宝哥软件园 浏览:

关键词:标识符、执行上下文、范围、范围链、变量对象、活动对象。理解JavaScript如何管理范围和范围链很重要。因为范围链中要搜索的变量对象的数量直接影响标识符解析的性能。标识符在范围链中的位置越深,查找和访问它的时间就越长。如果范围管理不当,将对脚本的执行时间产生负面影响。当执行JavaScript代码时,JavaScript引擎会创建一个执行上下文。执行上下文(有时称为范围)设置代码执行的环境。JavaScript引擎会在页面加载后创建一个全局执行上下文,然后在每次执行函数时创建一个对应的执行上下文,最后构建一个执行上下文的栈,当前活动的执行上下文在栈顶。每个执行上下文都有一个用于解析标识符的关联范围链。范围链包含一个或多个定义执行上下文范围内标识符的变量对象。全局执行上下文的作用域链中只有一个变量对象,它定义了JavaScript中所有可用的全局变量和函数。创建(不执行)函数时,JavaScript引擎会将创建时执行上下文的范围链分配给函数的内部属性[[范围]]。然后,当函数执行时,JavaScript引擎将创建一个活动对象,并在初始化过程中为该对象、参数、命名参数和函数的所有局部变量赋值。活动对象出现在执行上下文范围链的顶部,后面是函数[[范围]]属性中的对象。当执行代码时,JavaScript引擎通过搜索执行上下文的范围链来解析标识符,如变量名和函数名。解析标识符的过程从作用域的顶部开始,从上到下进行。验证理论函数add (num1,num 2){ return num 1 num 2;}当这段代码开始执行时,add函数有一个[[scope]]属性,该属性只包含全局变量对象。如下所示:

当执行add函数时,JavaScript引擎将创建一个新的执行上下文和一个包含这个、参数、num1和num2的活动对象,并将活动对象添加到作用域链中。在add()函数内部运行时,JavaScript引擎需要解析函数中的num1和num2标识符。var total=add(5,10);

解析过程从作用域链中的第一个对象开始,该对象是包含函数局部变量的活动对象。如果在这个对象中没有找到标识符,它将继续在作用域链中的下一个对象中寻找标识符。一旦找到标识符,搜索就结束了。高效的数据访问局部变量是JavaScript中最快的标识符。一个很好的经验:当任何非局部变量在一个函数中使用多次时,它应该作为局部变量存储。对于数组和对象,总是将那些需要频繁访问的值存储在局部变量中。实际上,每次访问HTMLCollection对象的属性时,都会动态查询DOM文档。如果需要重复访问HTMLCollection对象的成员,一种有效的方法是将它们复制到一个数组中。

版权声明:关于JS管理范围的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。