// 《作用域链就是:当声明一个函数时,局部作用域一级一级向上包起来,就是作用域链》
// 1.查看当前作用域,如果当前作用域声明了这个变量,可以直接访问
// 2.查找当前作用域的上级作用域,也就是当前函数的上级函数,看看上级函数中有没有声明,有就返回变量,没有继续下一步
// 3.再查找上级函数的上级函数,直到全局作用域为止,有则返回,无则继续
// 4.如果全局作用域中也没有,我们就认为这个变量未声明(xxx is not defined)
// 《以下就形成了作用域链》
var a = 1;
function fn() { // 声明函数的作用域
var b = 10;
function fn1() {
var b = 20;
console.log(b); // 输出20;访问了自己函数里面的变量 局部变量;
console.log(age,'23行');
}
function fn2() {
console.log(b); // 输出10;内部找不到变量,则会向创建声明函数的作用域依次向上查找; 所以他查找了fn()作用域下的变量 b;
console.log(age,'27行');
}
fn1();
fn2();
var age = 60; // undefined
}
fn();
console.log(a); // 输出了a 访问了全局变量