6 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
这里有两个坑:
一、在变量提升过程中有这样的顺序,函数形参 > 函数 > 变量,另外,赋值操作会覆盖声明过程。
针对这题相当于:
function a(){}
var a;
a = 0;// 这里的赋值操作会覆盖前面声明的function a,
....
二、js 引擎编译过程的差异
代码:
console.log(a);
var a = 0;
console.log(a);
if (a++) {
function a() {console.log('function a')};
}
console.log(a());
chrome v8会在编译对不执行代码(dead code)(这里时条件为false)进行优化,我的理解是这里function a(){} 这段被去除。所以这里function a 在执行时就不存在提升了。
undefined
0
// 报错
IE Chakra(我在IE11进行了测试) 会把function a(){} 编译进去,就是和我们预期的函数、变量提升相同。
function a() {console.log('function a')};
0
// 报错
添加回答
举报
0/150
提交
取消