三个函数调用之后分别输出什么？
下面的三个函数调用之后分别输出什么？
```
function f1(x, y, a) {
    arguments[2] = 10;
    console.log(a);
}
f1(1, 2, 3);

function f2(x, y, a) {
    arguments[2] = 10;
    console.log(a);
}
f2(1, 2);

function f3(x, y, a) {
    arguments[2] = 10;
    console.log(arguments[2]);
}
f3(1,2);
```
求分析:
输出结果：第一次：10；第二次：undefined；第三次：10
- arguments是伪值，它是传入函数参数的值组成的数组，它的顺序和参数列表一致，且可以在函数内被重写
- arguments中，每一个值都是指向参数本身的内存，而并非是副本
- 函数内`arguments`，其实就是取到了`[x, y, a]`
- 其中，`arguments[2]`对应的是`a`，且直接指向`a`的内存
- 因此，第一个函数输出10，因为修改`arguments[2]`也就是修改`a`的内存，也就是对`a`赋值10
- 第二次，由于没有传`a`，所以`arguments[2]`没有指向任何内存，且`a`也没有指定内存，因此是`undefined`
- 第三次，由于`arguments[2]`没有指向任何内存，`a`也没有指定内存，所以，`arguments[2]`实质是给`arguments[2]`开辟了一块内存，并初始化值为10，但是这块内存并不是`a`的内存

arguments是伪值，它是传入函数参数的值组成的数组，它的顺序和参数列表一致，且可以在函数内被重写
arguments中，每一个值都是指向参数本身的内存，而并非是副本
函数内`arguments`，其实就是取到了`[x, y, a]`
其中，`arguments[2]`对应的是`a`，且直接指向`a`的内存
因此，第一个函数输出10，因为修改`arguments[2]`也就是修改`a`的内存，也就是对`a`赋值10
第二次，由于没有传`a`，所以`arguments[2]`没有指向任何内存，且`a`也没有指定内存，因此是`undefined`
第三次，由于`arguments[2]`没有指向任何内存，`a`也没有指定内存，所以，`arguments[2]`实质是给`arguments[2]`开辟了一块内存，并初始化值为10，但是这块内存并不是`a`的内存