当函数声明遇到函数表达式时
- 作者: 五速梦信息网
- 时间: 2026年03月19日 18:00
那么当函数声明遇到函数表达式时,会有什么样的结果呢,先看下面这段代码:

function hoistFunction() {
foo(); // 2
var foo = function() {
console.log(1);
};
foo(); // 1
function foo() {
console.log(2);
}
foo(); // 1
}
hoistFunction();
运行后我们会发现,输出的结果依次是2 1 1,为什么会有这样的结果呢?
因为JavaScript中的函数是一等公民,函数声明的优先级最高,会被提升至当前作用域最顶端,所以第一次调用时实际执行了下面定义的函数声明,然后第二次调用时,由于前面的函数表达式与之前的函数声明同名,故将其覆盖,以后的调用也将会打印同样的结果。上面的过程经过预编译之后,代码逻辑如下:

// 预编译之后
function hoistFunction() {
var foo;
foo = function foo() {
console.log(2);
}
foo(); // 2
foo = function() {
console.log(1);
};
foo(); // 1
foo(); // 1
}
hoistFunction();
我们也不难理解,下面的函数和变量重名时,会如何执行:
相关文章
-
VSCode 必装的 10 个高效开发插件
VSCode 必装的 10 个高效开发插件
- 技术栈
- 2026年03月19日
-
VS Code 必备插件推荐
VS Code 必备插件推荐
- 技术栈
- 2026年03月19日
-
bootstrap和easyUI的区别
bootstrap和easyUI的区别
- 技术栈
- 2026年03月19日
-
linux的下载利器——aira2 可以下载磁力链接
linux的下载利器——aira2 可以下载磁力链接
- 技术栈
- 2026年03月19日
-
Linux一键安装Aria2 + YAAW实现离线下载
Linux一键安装Aria2 + YAAW实现离线下载
- 技术栈
- 2026年03月19日
-
跟老齐学python:django实战 带目录完整pdf[151MB]
跟老齐学python:django实战 带目录完整pdf[151MB]
- 技术栈
- 2026年03月19日
