看到有朋友在滴滴的面试题
var kit = 1;
function fac(){
kit = 10;
return;
function kit(){};
}
fac();
console.log(kit); // 输出是什么
这里考的是函数变量提升的问题,在js预编译阶段时会将当前作用域内的var声明和函数声明提升至当前作用域顶部,并将var声明的变量初始化为undefined,而在执行阶段会从上而下按顺序执行。
关于Event loop事件循环这里不讲
JavaScript 的并发模型基于“事件循环”。
也就是说在 fac 函数内部执行时 kit 的函数声明已经提升至函数内部作用域的顶部,执行时 kit 赋值实际上是将 fac 函数作用域内的 kit 函数赋值为10,并没有修改外部声明的 kit 变量。在外面执行完 fac 函数之后输出 kit 的变量值是没有修改过的,所以输出仍旧是1。

这里补充一个题目
let i = 1;
(function(){
console.log(i);
return;
var i = 0;
function i(){}
})();
// 你觉得会输出什么呢


本文深入探讨了JavaScript中函数变量提升的概念,通过具体代码示例解释了预编译阶段和执行阶段变量提升的机制,以及如何影响代码执行结果。
846

被折叠的 条评论
为什么被折叠?



