作用域链
如果要理解作用域链就要先理解作用域,所以要先明白作用域
一、作用域
作用域就是变量与函数的可访问范围
即作用域控制着变量与函数的可见性和生命周期
二、作用域分为全局作用域和局部作用域
全局作用域:代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。
局部作用域:在固定的代码片段才能被访问。函数内部的声明式函数也是局部函数
三、[[scope]]
[[scope]]: 每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,
[[scope]]就是其中一个,[[scope]]指的是我们所说的作用域,其中存储了运行期上下文集合;
四、作用域链
作用域链: [[scope]]中所存储的执行期上下文对象集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链;
逐层衍生、逐层嵌套的作用域拥有以下的特性:
1.外层作用域无法调用内层作用域的变量和常量
2.代码执行需要时,优先引用当前所在执行环境中的变量和常量
3.直至追溯到最外层作用域( window 或 global)仍未定义的引用,即为 not defined.
原型链
JavaScript的所有对象中都包含了一个 __proto__内部属性,这个属性所对应的就是自身的原型,实例与原型之间的链条形成的链式结构叫做原型链
1.prototype
prototype是函数独有的属性,它从一个函数指向另一个对象,代表这个对象是这个函数的原型对象,这个对象也是当前函数所创