JS作用域的理解
JS中的作用域分为两种:
函数都有自己的作用域,
全局作用域和局部作用域(局部变量)还有es6中的块级作用域。
函数作用域中定义的变量,只能在函数中调用,外界无法访问。
没有块级作用域导致了if或for这样的逻辑语句中定义的变量可以被外界访问,
因此ES6中新增了let和const命令来进行块级作用域的声明。
1 块级作用域: 2 内层变量可能会覆盖外层变量。 3 4 //循环绑定的问题 5 for (var i = 0; i < 3; i++) { 6 setTimeout(() => console.log(i), 1); 7 } 8 for (let i = 0; i < 3; i++) { 9 setTimeout(() => console.log(i), 1); 10 } 11 12 //作用域链 变量的查找机制
作用域链
当前作用域没有定义的变量,这成为 自由变量 。自由变量的值如何得到 —— 向父级作用域寻找。一层一层向上寻找,直到找到全局作用域还是没找到,就宣布放弃。这种层层的寻找关系,就是作用域链 。
// 上级作用域 ,函数在哪里定义的,那么该函数执行形成的作用的上级作用域就是谁
// 了解了上级作用域, 就比较容易查找变量对应的值

浙公网安备 33010602011771号