当前位置:编程学习 > JAVA >>

javascript的变量、作用域

一、复制变量值
JavaScript有两种类型值:基本类型值和引用类型值。这两种类型值的复制结果是不一样的。
基本类型值
1 var num1 = 5;
2 var num2 = num1;
 那么num2的值将被赋为5,而且即便是删除num1也不会对它造成影响。
引用类型值
1 var obj1 = new Object();
2 obj1.age = 5;
3 var obj2 = obj1;
 虽然obj2.age同样为5,但其实obj1和obj2是指向同一对象,如果删除obj1,那么obj2也不存在。
 
二、参数传递
JavaScript中的参数传递都是按值传递的,即:在传递的过程中,将函数外的值复制给参数。
因此就会得出以下结果:
基本类型值
 
1 var num1 = 5;
2 function setValue(obj){
3     return obj += 10;
4 }
5 var num2 = setValue(num1);
6 alert(num1);//5
7 alert(num2);//15
 
 因为这是一个复制的过程,基本类型的复制不会对原值产生影响,所以在函数内对参数进行计算,并不会改变num1的值。
引用类型值
 
1 function setAge(obj){
2       obj.age = 15;
3 }
4 var john = new Object();
5 setAge(john );
6 alert(john.age);//15
 
 同理,因为应用类型值的复制,如果在函数中对参数进行重新复制,那么对函数外的原值也会造成影响。
三、作用域
和java、c等一些语言不通,JavaScript是没有块级作用域的。所谓的块级作用域,就是用{}抱起来的执行环境。
如:
 
1 (function(){
2     var i = 5;
3     if(i == 5){
4         var color = "blue";
5     }
6     alert(color);
7 })();
 
 相似代码下,java中最终会报错,因为if条件执行完后,color已经被销毁。但是JavaScript能正常执行。
没有块级作用域并不代表没有执行环境。
如以下代码:
 
1 (function(){
2     var i = 5;
3     if(i == 5){
4        var color = "blue";
5     }
6 })();
7 alert(color);
 
 因为color是在函数内声明的,函数结束后,函数的执行环境已经被销毁,color同样不存在,自然会报错。

 


摘自 のんきネコ

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,