JavaScript是一种解释型语言,按照<script>块儿来预编译和执行。

JavaScript解释器在预编译阶段,先预声明变量,再预声明函数。在执行阶段,进行变量赋值,和函数执行。

示例1:

预编译阶段,对于变量只进行预声明,并初始化值为undefined,在执行阶段才真正进行赋值。

 alert(variableA); //undefined
var variableA = 2;
alert(variableA); // alert(funcA); //function funcA(){alert('I am funcA.')}
funcA(); //I am funcA.
function funcA(){
alert('I am funcA.');
}

示例2:

预编译预条件无关!

 alert(variableA); //undefined
alert(funcA); //function funcA(){alert('I am funcA.')}
funcA(); //I am funcA if(true){
var variableA = 2; }else{
function funcA(){
alert('I am funcA.');
}
}
alert(variableA); //

示例3:

JavaScript按照<script>代码块来预编译!

 <script>
funcA(); //I am funcA too.
function funcA(){
alert('I am funcA.');
}
function funcA(){
alert('I am funcA too.');
}
</script>
 <script>
funcA(); //I am funcA.
function funcA() {
alert('I am funcA.');
}
</script>
<script>
funcA(); //I am funcA too.
function funcA() {
alert('I am funcA too.');
}
</script>

示例4:

先预声明变量,再预声明函数,因此,预编译阶段variableA函数覆盖了variableA变量。在执行阶段,variableA变量被赋值为2,

 alert(variableA); //function variableA(){alert('I am variableA.')}
var variableA = 2;
function variableA(){
alert('I am variableA.');
}
alert(variableA); //
 alert(variableA); //function variableA(){alert('I am variableA.')}
function variableA(){
alert('I am variableA.');
}
var variableA = 2; alert(variableA); //

示例5:

 alert(variableA); //undefined
var variableA = function(){
alert('I am variableA.');
}
alert(variableA); //function variableA(){alert('I am variableA.')}
 alert(variableA); //undefined
var variableA = function variableA(){
alert('I am variableA.');
} alert(variableA); //function variableA(){alert('I am variableA.')}

示例6:

函数默认返回值为undefined

 var variableA = funcA(2);
function funcA(num){
num = num + 1;
} alert(variableA); //undefined
04-21 12:21