作用域是对于JavaScript执行顺序理解中非常关键的一环,也是面试题中经常出现的,因为其灵活程度,很多新手在这里吃尽苦头。所以出一篇简单的教程教大家如何快速掌握JavaScript作用域的使用的。
这里我们先抛弃ES6中的let const等声明方式,虽然他让JavaScript严谨性变强,但是我们还是需要先抛弃他们,理解这其中的细节之处,到时候无论面试还是开发,都能够避免很多潜在问题。
什么是作用域
作用域决定了这些变量的可访问性(可见性)。
也就是说我在程序的任意位置什么一个变量,这个变量在程序的那些位置有效可以访问,哪些位置无效不可访问都是作用域所决定的。而变量在JavaScript中声明的方式有多种,如var声明,函数声明和参数声明。
var a = 0; // var声明变量
function a(){} //函数声明方式
function fn(a){} //参数a为参数声明
当然还有一种特殊情况,如果是这样算什么声明了?
var a = function(){} //这也是var声明 只不过是函数赋值给变量a
而变量声明之后实际上是在内存中开辟一块空间,用来存储这个变量所表示的数据。而JavaScript不像C/C++一样,对于内存的申请释放是需要手动的,JavaScript的内存控制都是全自动的,也就是说自动申请,自动销毁。所以这就是为什么这个变量可能在某一个块能访问,因为内存没有销毁,但是如果销毁了,那么程序就自然而然访问不到这个变量了。所以这就是作用域的作用,也就是JavaScript变量可访问性控制。