理解作用域
引擎:负责JavaScript程序的编译及执行过程
编译器:负责语法分析及代码生成
作用域:负责收集并维护所有声明的标识符
作用域的嵌套:一个块或者函数嵌套在另一个块级作用域中时,就发生了块级作用域的嵌套。因此在当前作用域中无法找到某个变量时,引擎就会在外层的作用域查找,直到找到该变量或者抵达最外层作用域(全局作用域)为止。
var value=1;
function bar1(){
var value=2;
function foo1(){
console.log(value);
}
foo1();
}
bar1();//2
词法作用域:一个变量和函数的词法作用域取决于该变量或函数声明的地方,写在哪词法作用域就在该块作用域。
var value=1;
function foo2(){
console.log(value);
}
function bar2(){
let value=2;
foo2();
}
bar2();//1
为什么两者的结果不同呢?
这是因为JS采用的是词法作用域,及变量或函数的作用域是由声明时位置决定的。对于foo1,它的作用域是bar1所以结果为2,对于foo2,它在声明时作用域是在window中,所以查找时foo2内部没有value,向外查找window中value
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。