提升变量和函数参数?

Hoisting variables and functions parameters?

考虑以下示例:

function a(a){
    console.log(a);
    function a(){}
    var a=7;
    console.log(a);
}
a(10)

那为什么第一次打印的是一个函数而不是10;

函数声明在编译时本身被解析,声明被移动到函数的顶部,像这样

function a(a) {
    var a = function a() {};
    console.log(a);
    a = 7;
    console.log(a);
}
a(10)

这就是为什么您在第一个 console.log 中得到 [Function: a] 或类似的东西。当行 a = 7; 被执行时,a 被赋值为 7。这就是为什么第二个 console.log 打印 7.