var tmp = new Date();
function f() {
console.log(tmp);
if (false) {
var tmp = 'hello world';
}
}
f(); // undefined
var tmp = new Date();
function f() {
console.log(tmp);
}
f(); // Tue Feb 26 2019 17:41:29 GMT+0800 (中国标准时间)
这个明明if不会执行 相当于没有 为什么写不写 输出就不一样呢
调用一个函数的过程中,执行上下文会被创建,生命周期会分为两个阶段,创建和执行。
创建阶段:执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向。
执行阶段:会完成变量赋值,函数引用,以及执行其他代码。
也就是说在创建阶段如果找到一个变量声明,则会以变量名创建个属性,值为undefined。执行阶段才会被真正赋值。
来源: 前端基础进阶(三):变量对象详解