js面试题解析

作者: MJ 分类: javascript 发布时间: 2019-06-19 21:18

群里讨论的面试题,拿出来分析下。

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

欢迎关注小程序,感谢您的支持!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注