今天我给大家分享JavaScript中的变量提升,这是java中变有的概念,在这里我将会结合java作一个简单的比较。
请看下面JavaScript的代码:
<script type="text/javascript">
var a = 11;
document.write(a); //11
document.write(b); //undefined
var b = 111;
</script>
大家可以看到上面的代码中,变量b在打印语的后面输出了,却没有报错。这是为什么呢?相信有点java基础的很难相信不会报错,当初我学习的时候也是这样的。下面我解释一下,这是为什么?原因是在JavaScript编译的时候会把<script></script>中的所有变量都提升上来,然后赋值为undefined。然后依然向下执行script语句,直到遇到赋值语句时才会把值赋给变量。从上面的代码可以看到,变量a在打印前初始化了,而变量b在打印后初始化,这才导致结果和想象中的不一样,所以我在里强调大家一句,
在写js代码时一定要把所有变量都定义在开头。
下面再下看一段简单的java代码:
public class Test {
public static void main(String[] args){
int a = 11;
System.out.println(a);
// System.out.println(b); //b cannot be resolved to a variable
int b = 111;
}
}
上面的java代码连编译都通不过,报错说,变量b没有定义。这也就是JavaScript和Java的不同之处。