关于函数实参赋值和函数内部预先解析的先后顺序不是很清楚

function fn(n) {
    console.log(n);
    var n = 2;   
}
fn(3);

打印为3

function fn(n) {
    console.log(n);
    var n = 2; 
    function n(){}  
}
fn(3);

打印为ƒ n(){}

预解析是变量前置输出undefined, 函数前置输出函数体;

那我觉得第一个输出的是undefined , 第二个输出函数体,为什么传了个实参进去后变量前置就变成实参了。这里函数的实参和函数内的预解析是哪个先执行?

根据实际结果来分析,函数调用时应该是先进行函数参数的声明和赋值,再进行函数体的预解析。