作用域是指变量和函数在代码中的可访问范围。在JavaScript中,主要有全局作用域、函数作用域和块级作用域三种。
全局作用域是在最外层定义的变量,整个程序都可以访问。函数作用域是在函数内部定义的变量,只能在函数内部访问。块级作用域是通过let和const声明的变量,只在对应的代码块内有效。
作用域链是JavaScript查找变量时遵循的机制。当访问一个变量时,JavaScript会从当前作用域开始查找,如果找不到,就向上一级作用域查找,一直找到全局作用域为止。这个查找路径就形成了作用域链。
比如在函数内部访问一个变量,会先在函数作用域内查找,找不到就去外层函数作用域查找,最后到全局作用域。这种机制保证了变量的正确访问,也形成了闭包的基础。
作用域链的查找是单向的,只能从内向外查找,不能从外向内。这样可以避免内层作用域意外修改外层变量,保证了代码的安全性。