使用函数字面量和函数式声明同时声明两个同名函数,为什么结果只执行函数字面量声明的函数?

问题:

var getName = function(){alert(1)};
function getName(){alert(2)};

getName();// 1

or

function getName(){alert(2)};
var getName = function(){alert(1)};

getName();// 1

为什么?

阅读 2.4k
3 个回答
var getName = function(){alert(1)};
function getName(){alert(2)};

getName();// 1

可以理解为,上面一部分为预先处理。

var getName;
function getName(){alert(2)};

getName = function(){alert(1)};
getName();// 1

测试例子为

getName();
function getName(){alert(2)};

第二个可以理解为,同样第一部分为预先处理。

function getName(){alert(2)};
var getName;

getName = function(){alert(1)};
getName();// 1

这就是为什么每次都是1

首先函数声明会提前
两种等价于 先声明了getName函数 然后后面getName覆盖

1.声明式函数会被提前声明和定义
2.执行过程中,可重新赋值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏