Javascript定义function的区别

来源:互联网 发布:手机淘宝微淘动态删除 编辑:程序博客网 时间:2024/04/30 23:41

今天看一本《悟透javascript精华》里面发现了一个非常好玩的东西让大家来分享一下!

我们来看看下面的代码:

1.

var myfunc = function (){alert("hello");};myfunc(); myfunc = function (){alert("yeah");};myfunc(); 


这段代码是不是很简单,对于有过javascript编程经验的人来讲这段一定不陌生的。那如果运行这段程序的话,结果是多少呢?那大家就思考一下!

我们再看一段代码:

2.

function myfunc (){alert("hello");};myfunc(); function myfunc (){alert("yeah");};myfunc(); 

看了这段代码,有人就要问了,这段代码和上一段代码不是一样的吗?那我就要问了,如果又运行这段代码那结果又是多少呢?

那答案是多少呢?1中运行的结果:hello yeah,而2中运行的结果却是yeah yeah.

其实这就是今天我要讲的重点啦,这两段代码看似一样的,但是却有不相同的地方,他们的定义格式是不同的。按理说,两个签名完全相同的函数,在其他编程语言中应该是非法的。但在JavaScript 中,这没错。不过,程序运行之后却发现一个奇怪的现象:两次调用都只是最后那个函数里输出的值!显然第一个函数没有起到任何作用。这又是为什么呢?

原来,JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定
义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码。也就是说,在第一次调用myfunc 之前,
第一个函数语句定义的代码逻辑,已被第二个函数定义语句覆盖了。所以,两次都调用都是执行最后一个函数逻辑了。