代码示例: function test(a){ console.log(a); function a (){ } var a = "AAAA"; console.log(a); } 在这段代码在中,首先进行的是 a 函数的声明和定义,然后进行变量 a 的变量提升,所以第一次输出的 a 并不是输出 undefined ,而是 a 函数。 解析 因为在 JavaScript 中的函数是一等公民,函数声明的优先级最高,会被提升至当前作用域最顶端。所以第一次调用时实际执行了下面定义的函数声明,然后第二次调用时,由于前面的函数表达式与之前的函数声明同名,故将其覆盖。