1. 函数变量的作用域链
- 先在当前函数作用域内部查找是否含有变量,如果没有,就去上一级作用域中查找
- 举个栗子:
let x = 3;
let y = 10;
function test1() {
let x = 5;
function test2() {
console.log(x, y);
}
return test2();
}
test1() //输出结果为5,10
- 对上述例子的图解
2. 理解了函数作用域链之后、观察有默认形参的作用域链有什么不同
一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。 —摘自阮一峰<es6>
- 引例1
let y = 'out'