js的作用域、作用域链
什么是作用域?
JS作用域也就是JS识别变量的范围,
变量的作用域分为:全局变量、局部变量。
JS作用域主要包括 :
- 全局作用域:也就是定义在window下的变量范围,在任何地方都可以访问,
- 局部作用域:是只在函数内部定义的变量范围
- ES6的块级作用域:简单来说用let和const在任意的代码块中定义的变量都认为是块级作用域中的变量,例如在for循环中用let定义的变量,在if语句中用let定义的变量等等 (JS是没有块级作用域的)
注: 1、 尽量不要使用全局变量,因为容易导致全局的污染,命名冲突,对bug查找不利。
2、而所谓的作用域链就是由最内部的作用域往最外部,查找变量的过程.形成的链条就是作用域链
什么是是作用域链?
官方解释:作用域链也就是JS查找变量的顺序
先了解自由变量:当前作用域没有定义的变量,这成为自由变量 。
白话:自由变量先在局部作用域(父级)查找如果找到就返回,如果没有找到,就再一层一层向上寻找,直到找到全局作用域还是没找到,就宣布放弃(undefined)。这种一层一层的关系,就是作用域链 。
var a = 100 //全局变量
function fn() {
var b = 200 //局部变量
console.log(a) // 这里的a在这里就是一个自由变量
console.log(b)
}
fn()
//块级作用域
for (let i = 0; i < btns.length; i++) {
console.log('第' + (i + 1) + '个')
}