有哪位大神知道为什么最后一个console.log会报错
我自己尝试了debugger
发现if语句进不去,a是等于1的
这个题目典型的考察js变量提升,注意,js变量提升只是大家常见的说法,严谨的说这种类型的题还是考察js的底层执行过程,就是js代码是如何被解释、编译(可能有人会说:fuck,js会编译?开什么玩笑...,我呵呵...)、执行一整套完整流程,现在我们就按照变量提升的说法来解释
这里特别说明,楼主的测试应该是在chrome中进行的,你在ie中试试,第一个console.log应该是打印一个函数,ie和标准浏览器对if这种条件的变量、函数预解析方式不一样
这里有两个坑:
一、在变量提升过程中有这样的顺序,函数形参 > 函数 > 变量,另外,赋值操作会覆盖声明过程。
针对这题相当于:
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());
undefined
0
// 报错
function a() {console.log('function a')};
0
// 报错
8 回答4.5k 阅读✓ 已解决
6 回答3.1k 阅读✓ 已解决
5 回答2.7k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
a++ 是 0
,然后 a 是 1