请问最后的输出结果为啥是undefined啊??

var tmp = new Date();

function f() {
console.log(tmp);
if (false) {
var tmp = "hello world";
}
}

f(); // undefined

因为if没有块级作用域,所以函数f内存在私有变量tem。
f()在执行之前,预处理时声明变量var,但并没有定义;
f()在执行时console.log(tmp)首先查找私有变量tmp,存在就不必在作用域外查找了,又输出在定义之后,所以结果为undefined。

var tmp = new Date();
去掉var

因为if没有块级作用域,因此在if中的var tmp变量提升,实质上你写的代码被转换成这样的:
var tmp = new Date();
function f() {
var tmp;
console.log(tmp);
if (false) {
tmp = "hello world";
}
}
f(); // undefined
tmp没有被赋值,因此是undefined