笔记1:关于作用域

1
2
3
4
5
6
7
8
9
var x = 10;
function foo(){
console.log(x);
}
function bar(){
var x = 20;
foo();
}
bar();

输出为:10
解析:作用域链的角度:执行bar()函数时进入到function bar()作用域里面,然后执行foo()函数,进入到function foo()作用域里面,要输出x,然后function foo()去找x,只有在全局global环境中找到了var x = 10;所以bar()就输出了10

1
2
3
4
5
6
7
8
9
var x = 10;
function bar(){
var x = 20;
function foo(){
console.log(x);
}
foo();
}
bar();

输出为:20
解析:执行bar()函数进入到function bar()作用域里面,然后执行foo()函数,进入到function foo()作用域里面,要输出x,然后function foo()去找x,根据作用域链,我们先找foo()函数里面的x,发现没有,就去找bar()函数里的x ,发现是var x = 20就停止搜索了,所以bar()就输出了20