Javascript的声明2013-10-15 Justany_WhiteSnow 下面Javascript代码为什么能运行?
hello();function hello(){alert("Hello, world!");}但对于C,这么写会报错:
#include "stdio.h"void main(){hello();}void hello(){printf("Hello, worldn");}由于hello没有被预先声明,代码“hello()”被认为是隐式声明,而隐式声明返回类型是int,所以提示hello类型错误。通过预先声明或者将main函数放在hello函数的后面可以很容易解决这个问题。那么对于Javascript却能运行,这代表了什么呢?被提升的声明Javascript引擎会先对代码解释,将声明提升,然后再执行。例如为了判断一个变量定义与否,如果我们如此写是会出引用错误的:
if(someVar === undefined){alert("someVar未定义");}但如果这样却不会出错:
if(someVar === undefined){var someVar = 1;alert("someVar未定义");}可见声明被提升了,但只有声明被提升了,因为someVar依然等于undefined,而不是1。值得一提的是,这样子写也会报错:
if(someVar === undefined){someVar = 1;alert("someVar未定义");}这证明在解释阶段,隐式声明是没有作用的!而且为了让代码逻辑清晰,还是用显式声明吧!