JavaScript解析机制

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

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

示例1:

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

 1 alert(variableA); //undefined
 2 var variableA = 2;
 3 alert(variableA); //2
 4 
 5 
 6 alert(funcA); //function funcA(){alert('I am funcA.')}
 7 funcA(); //I am funcA.
 8 function funcA(){
 9     alert('I am funcA.');
10 }

示例2:

预编译预条件无关!

 1 alert(variableA); //undefined
 2 alert(funcA); //function funcA(){alert('I am funcA.')}
 3 funcA(); //I am funcA
 4 
 5 if(true){
 6     var variableA = 2;
 7     
 8 }else{
 9     function funcA(){
10         alert('I am funcA.');
11     }
12 }
13 alert(variableA); //2

示例3:

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

1 <script>
2     funcA(); //I am funcA too.
3     function funcA(){
4         alert('I am funcA.');
5     }
6     function funcA(){
7         alert('I am funcA too.');
8     }
9 </script>
 1 <script>
 2     funcA(); //I am funcA.
 3     function funcA() {
 4         alert('I am funcA.');
 5     }
 6 </script>
 7 <script>
 8     funcA(); //I am funcA too.
 9     function funcA() {
10         alert('I am funcA too.');
11     }
12 </script>

示例4:

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

1 alert(variableA); //function variableA(){alert('I am variableA.')}
2 var variableA = 2;
3 function variableA(){
4     alert('I am variableA.');
5 }
6 alert(variableA); //2
1 alert(variableA); //function variableA(){alert('I am variableA.')}
2 function variableA(){
3     alert('I am variableA.');
4 }
5 var variableA = 2;
6 
7 alert(variableA); //2

示例5:

1 alert(variableA); //undefined
2 var variableA = function(){
3     alert('I am variableA.');
4 }
5 alert(variableA); //function variableA(){alert('I am variableA.')}
1 alert(variableA); //undefined
2 var variableA = function variableA(){
3     alert('I am variableA.');
4 }
5 
6 alert(variableA); //function variableA(){alert('I am variableA.')}

示例6:

函数默认返回值为undefined

1 var variableA = funcA(2);
2 function funcA(num){
3     num = num + 1;
4 }
5 
6 alert(variableA); //undefined

 

转载于:https://www.cnblogs.com/zhouwenhong/p/4027687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值