学习分享(作用域链浅谈)
作为初学者,理解肯定有错漏之处,望阅读的大神不吝指正
1. 作用域
任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有 全局作用域 和 局部作用域 两种。
全局作用域 在代码中任何地方都能访问到的对象(万物皆对象 虽不明仍觉厉)。
局部作用域 和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部。
2. 作用域链
函数对象有一个内部属性[[Scope]],包含了函数被创建后的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。
- 函数在执行的过程中,先从自己内部找变量
- 如果找不到,再从创建当前函数所在的作用域去找, 以此往上
- 注意找的是变量的当前的状态
3. 基本类型和引用类型(有助于作用域链的理解运用)
-
基本类型值(数值、布尔值、字符串、null和undefined):指的是保存在栈内存中的简单数据段;
-
引用类型值(对象、数组、函数、正则):指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象
-
原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。
-
引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。
网友评论