js面试题解析
群里讨论的面试题,拿出来分析下。
console.log(a);
a();
var a = 1;
var b = 2;
function a(){
b = 3;
console.log(b);
return;
function b(){}
}
console.log(b);
console.log(a)
a = 3;
a();
先不要看结果,自己分析一下,也可以考一下自己,我自己首先拿到题会这样分析,先写一下伪代码,其实也是js的执行顺序,如果分析好了,这样的题目再怎么变也不会出错了。
伪代码分析:
var a;
var b;
function a(){
b = 3;
console.log(b);
return;
function b(){}
}
console.log(a)
a();
a = 1;
b = 2;
console.log(b)
console.log(a);
a = 3;
a();
1:首先变量会提升,会把var a 、var b、function a(){…}提升到执行上下文的顶部。
2: 由于函数是一等公民,会在全局找是否有同名的,如果有就忽略,所以console.log(a), 会输出f a(){…}
3:然后执行a(),那就是正常执行a方法,console.log(b),首先在自己作用域内部查找变量b,找到了b=3,所以打印出来3。
4:然后执行console.log(b),此时b被赋值为2,所以打印出来是2。
5:然后执行console.log(a),此时a被赋值为1,所以打印出来是1。
6:然后执行a(),此时a被赋值为3,所以执行a(),已经不是一个方法了,而是一个number了,所以结果是 Uncaught TypeError: a is not a function。
所以结果是:
ƒ a(){
b = 3;
console.log(b);
return;
function b(){}
}
3
2
1
Uncaught TypeError: a is not a function
欢迎关注小程序,感谢您的支持!