JS作用域的理解

JS中的作用域分为两种:

函数都有自己的作用域,

全局作用域和局部作用域(局部变量)还有es6中的块级作用域

函数作用域中定义的变量,只能在函数中调用,外界无法访问。

没有块级作用域导致了iffor这样的逻辑语句中定义的变量可以被外界访问,

因此ES6中新增了letconst命令来进行块级作用域的声明。

 

 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 //作用域链  变量的查找机制

 

作用域链

当前作用域没有定义的变量,这成为 自由变量 。自由变量的值如何得到 —— 向父级作用域寻找一层一层向上寻找,直到找到全局作用域还是没找到,就宣布放弃。这种层层的寻找关系,就是作用域链

// 上级作用域 ,函数在哪里定义的,那么该函数执行形成的作用的上级作用域就是谁

// 了解了上级作用域, 就比较容易查找变量对应的值

 

posted @ 2021-08-15 19:28  悠哉de小猫  阅读(134)  评论(0)    收藏  举报