100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > js 函数的执行环境和作用域链的深入解析【javascript】

js 函数的执行环境和作用域链的深入解析【javascript】

时间:2021-06-10 16:25:45

相关推荐

js 函数的执行环境和作用域链的深入解析【javascript】

web前端|js教程

js,函数

web前端-js教程

第一步. 定义后:每个已定义函数,都有一个内在属性[scope],其对应一个对象的列表,列表中的对象仅能内部访问。

在线会员管理 源码,ubuntu在线协作表格,爬虫前分析https,widget php,深圳seo网络lzw

例如:建立一个全局函数A,那么A的[Scope]内部属性中只包含一个全局对象(Global Object),而如果我们在A中创建一个新的函数B,那么B的[Scope]属性中就包含两个对象,函数A的Activation Object对象在前面,全局对象(Global Object)排在后面。

asp网站源码带后台,ubuntu 网络配置重启,潘石屹爬虫,php ord(),倪涛 seolzw

简而言之,一个函数的[Scope]属性中对象列表的顺序是上一层函数的Activation Object对象,然后是上上层的,一直到最外层的全局对象。

兼容性源码,vscode保存位置更改,ubuntu var,tomcat角色,sqlite 减法,插画类网页设计,dede 数据库内容替换 正则,香港服务器在国内犯法,微擎 投票插件,前端开发主流技术和开发框架技术,牙爬虫,php 获取小时,seo blog,springboot动态工厂,seo常用的标签,展示网站源码,织梦网页底部白条,帝国网站地图模板,html 后台管理系统模板,手机页面点击加载更多,织梦管理系统加源码,中英双语蓝色大气企业织梦整站源码程序lzw

第二步.执行时:当一个函数被执行的时候,会自动创建一个可以执行的对象(Execution Object),并同时绑定一个作用域链(Scope Chain)。作用域链会通过下面两个步骤来建立,用于进行标识符解析。

首先,将函数对象[Scope]内部属性中的对象,按顺序复制到作用域链Scope Chain中。

其次,在函数执行时,会创建一个新的Activation Object对象,这个对象中包含了this、参数(arguments)、局部变量(包括命名的参数)的定义,这个Activation Object对象会被置于作用域链的最前面。

所以在Scope Chain中最后顺序是本函数的Activation Object,然后是上层函数的Activation Object,再上上层的Activation Object,一直到Global Object。

当执行js代码的过程中,遇到一个标识符,就会根据标识符的名称,在执行上下文(Execution Context)的作用域链中进行搜索。从作用域链的第一个对象(该函数的Activation Object对象)开始,如果没有找到,就搜索作用域链中的下一个对象,如此往复,直到找到了标识符的定义。如果在搜索完作用域中的最后一个对象,也就是全局对象(Global Object)以后也没有找到,则会抛出一个错误,提示undefined。

由此而来的建议:

1. 尽量使用局部变量,这不仅仅是涉及到私有属性的问题,局部的变量从以上过程中可以看到,能够减少搜索的时间(注:在一般的情况下,不包括浏览器的优化行为)。

2. 避免使用with语句。因为它会修改执行上下文(Execution Context)的作用域链,在最前面添加一个对象(Variable Object)。同理,对于try-catch语句中的catch语句块也类似。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。