JS笔记--1.做用域

理解做用域


引擎:负责JavaScript程序的编译及执行过程函数

编译器:负责语法分析及代码生成code

做用域:负责收集并维护全部声明的标识符ip

做用域的嵌套:一个块或者函数嵌套在另外一个块级做用域中时,就发生了块级做用域的嵌套。所以在当前做用域中没法找到某个变量时,引擎就会在外层的做用域查找,直到找到该变量或者抵达最外层做用域(全局做用域)为止。作用域

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中valueio

相关文章
相关标签/搜索