JS 变量提升、执行上下文、作用域链
一、执行上下文(execute context)EC 理解:代码的执行环境 时机:代码正式执行之前会进入到执行环境,代码执行结束销毁 工作: 1.创建变量对象 (1)变量 (2)函数及函数的参数 (3)全局:window (4) 局部:抽象的但是确实存在 2.确认this指向 (1)全局:this ---> window (2) 局部:this----> 调用其的对象 3.创建作用域链 当前变量对象+父级作用域链+。。。 4.扩展: ECObj = { 变量对象:{变量,函数,函数的形参}, scopechain:父级作用域链 + 当前的变量对象, this:{window || 调用其的对象} } 二、 作用域链:上下文中代码执行时会创建变量对象的一个作用域链。 作用域链决定者各级上下文中代码访问变量和函数的顺序。 代码正在执行的上下文的变量对象始终位于作用域链的最前端。 作用域链的下一个变量对象来自包含上下文,再下一个变量对象来自下一个包含上下文。 以此类推直至全局上下文,全局上下文的变量对象始终是作用域链的最后一个变量对象。 作用域链增强:执行上下文主要有全局上下文和函数上下文两种(eval()调用内部存在第三种上下文), 但有其他方式来增强作用域链。某些语句会导致在作用域链前端临时添加一个上下文, 这个上下文在代码执行后会被删除 。 (1)try/catch语句的catch块 (2)with语句
标签:执行,变量,作用域,JS,对象,上下文,函数 来源: https://www.cnblogs.com/sexintercourse/p/15940082.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。