执行机制分析 | 代码中出现相同的变量或者函数怎么处理?

78 阅读1分钟

假设有这么一段代码

function showName() {
    console.log('我是方法');
}
showName();
function showName() {
    console.log('我才是方法');
}
showName(); 

你能分析一下这两次调用打印出来的值是什么吗?

我们来分析下它完整的执行流程:

  • 编译阶段,会先将函数声明提升,第一个 showName 函数声明被提升后,该函数体会被存放到变量环境中。第二个 showName 函数被提升后,直接覆盖了第一个 showName,所以变量环境中只存在第二个 showName。
  • 执行阶段两次调用 showName(),但是两次在变量环境中找到的都是第二个 showName,所以打印结果就是打印里两次“我才是方法”。

一段代码如果定义了两个相同名字的函数,那么最终生效的是最后一个函数。