Scope Chain一般在函数调用或者执行进入with块的时候改变。 函数的执行 JS函数执行并非简单地执行函数体(Function Body)中的JS代码,在此之前JS引擎会创建一个Activation Object,这个对象将会被作为Scope Chain的顶端,而函数的[[scope]]属性中的对象将被链接为其后续的对象。([[scope]]在函数定义
constname="Lydia"constage=21constgetPersonInfo(){name="Sarah"age=22`${name}is${age}and lives in${city}`}console.log(getPersonInfo()) 上面调用了函数getPersonInfo,然后返回了一个包含name,age,city的字符串: Sarah is 22 and lives in San Francisco。 但是getPersonInfo这个函数中并没有city变量,...
在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。 作用域链决...
const age = 22 return `${name} is ${age} and lives in ${city}` } console.log(getPersonInfo()) 上面调用了函数getPersonInfo,然后返回了一个包含name,age,city的字符串: Sarah is 22 and lives in San Francisco。 但是getPersonInfo这个函数中并没有city变量,那么它是怎么访问到city的呢? 首先,...
动图学 JavaScript 之:作用域链(Scope Chain)【本篇】 动图学 JS 之:事件循环(Event Loop)【Pending】 动图学 JS 之:JavaScript 引擎 【Pending】 参考资料 JavaScript Visualized: Scope (Chain) 本文首发于公众号:码力全开(codingonfire) 欢迎关注获取最新内容哦~...
每个javascript的执行上下文,都包含了三个东西 变量对象(Variable Object, VO) 作用域链(Scope Chain) this 作用域链 在《JavaScript深入之变量对象》中讲到,当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上
对于函数声明和匿名函数表达式来说,[[scope]]就是它创建时的Scope Chain,但是对于有名字的函数表达式,[[scope]]顶端是一个新的JS对象(也就是继承了Object.prototype),这个对象被链到函数创建时的Scope Chain,它本身有一个属性就是函数的名字,这确保了函数内部的代码可以无误地访问自己的函数名进行递归。
作用域链(Scope Chain)前言在第12 章关于变量对象的描述中,我们已经知道一个执行上下文的数据(变量、函数声明和函数的形参)作为属性存储在变量对象中。同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段。这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题—...
In most other languages, the code above would lead to an error because the “life” (i.e., scope) of the variableiwould be restricted to the for block. In JavaScript, though, this is not the case. Rather,iis added to the activation object at the top of the scope chain and it will...
由于 JavaScript 是个单线程模型的编程语言,因此任一时刻,正在运行的执行上下文只能有一个,称为 active EC;其他的 EC 则依它们被调用的先后次序,形成了一个后入先出的栈结构,简称 EC Stack。最地下的 EC 通常是 Global EC。EC 的创建与闭包实现的关键:作用域链 Scope Chain 每个函数执行时,都会生成一个...