JavaScript Hoisting和“先有鸡还是先有蛋”

代码很简单,但是有个很有趣的东西。

?

先看这段代码:

a = 2;

var a;

console.log( a );

控制台上会输出什么?

或许你会觉得是输出个undefined?,因为a定义声明是在a=2这个赋值声明之后的,console.log(a)的时候,a是没有赋值的,所以是undefined?。然而事实并非如此。输出是:2。

?

再看这段代码:

console.log( a );

var a = 2;

通过上面的例子:或许你觉着是输出2,或者抛ReferenceError?错。但这两个想法都是错的。输出是undefined?。

?

这两段代码阐述了一个问题:先有鸡还是先有蛋。

用JavaScript语言来提问就是:先有声明(declaration?),还是先有赋值(assignment)?

?

我觉着吧,除了鸡和蛋,还有个创造鸡和蛋的上帝!那就是程序员。

?

参考:

?

?

?

?

?

?

?

?

?

?

-------------------------------------------------------------------------------------------------------------------------------------

下面的广告好讨厌 不得已这样

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。