foo = 1;
}
console.log(foo);
最终的打印结果是:ƒ foo() { } 所以你猜对了吗 [手动狗头]
1.1 题目1 解题思路
{
console.log(window.foo, foo) // undefined ƒ foo() { }
function foo() { }
console.log(window.foo, foo) // ƒ foo() { } ƒ foo() { }
foo = 1;
console.log(window.foo, foo) // ƒ foo() { } 1
}
console.log(foo); // ƒ foo() { }
没错,你没看错,就是粗暴的用 console 对此我只想说,没有什么事 console 解决不了 如果有,那就多写几个 [二次手动狗头]
-
下边我们来一步一步分析
-
第一行,打印
undefined ƒ foo() { }说明此时,函数声明提升到了块级作用域顶部,但没有挂载到全局 -
第二行,function foo() { } 实际执行时,会有一个
隐式操作,将当前 foo 的值,同步给 window -
通过 第一行打印结果可以得出,此时 foo 为 ƒ foo() { }
-
第三行,打印
ƒ foo() { } ƒ foo() { }说明此时,函数已经被挂载到全局,且在第二行执行了上述的隐式操作 -
第四行,
foo = 1,此时修改的是块内的 foo,与外部 window 无关 -
第五行,打印
ƒ foo() { } 1印证上一行言论 -
最后一行,打印
ƒ foo() { }
{
function foo() { }
foo = 1;
function foo() { }
}
console.log(foo);
最终的打印结果是:1 所以你又猜对了吗 [还是手动狗头]
2.1 题目2 解题思路
{
console.log(window.foo, foo) // undefined ƒ foo() { }
function foo() { }
console.log(window.foo, foo) // ƒ foo() { } ƒ foo() { }
foo = 1;
console.log(window.foo, foo) // ƒ foo() { } 1
function foo() { }
console.log(window.foo, foo) // 1 1
}
console.log(foo); // 1
没错 console.log YYDS [重复手动狗头]
-
下边我们来一步一步分析
-
第一行,打印
undefined ƒ foo() { }说明此时,函数声明提升到了块级作用域顶部,但没有挂载到全局 -
第二行,function foo() { } 实际执行时,会有一个
隐式操作,将当前 foo 的值,同步给 window -
通过第一行打印结果可以得出,此时 foo 为
ƒ foo() { } -
第三行,打印
ƒ foo() { } ƒ foo() { }说明此时,函数已经被挂载到全局,且在 第二行执行了上述的隐式操作 -
第四行,
foo = 1,此时修改的是,块内的 foo,与外部 window 无关 -
第五行,打印
ƒ foo() { } 1印证上一行言论 -
第六行,function foo() { } 实际执行时,会有一个·隐式操作·,将当前 foo 的值,同步给 window
-
通过第五行行打印结果可以得出,此时
foo 为 1 -
第七行,打印
1 1 -
最后一行,打印
1
{
function foo() { }
foo = 1;
function foo() { }
foo = 2;
}
console.log(foo);
最终的打印结果是:1 所以你应该能猜对了吧 [强行手动狗头]
3.1 题目3 解题思路
{
总结
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。