JS学习_变量传值、作用域

变量传值、作用域

变量传值

基本数据类型:
Undefined、Null、Boolean、Number、String 五种。
引用类型: Array、Object、Function、Date、RegExp、基本包装类型(Boolean、Number、String )。

给变量赋值时,基本数据类型的值会采用专递数值的方式。例如:

var a = 10;
var b = a;

此时,b获得a的值,并建立副本,二者数据相互独立。

如果,变量传递引用类型时,传递的不是引用的内容,而是地址(指针)。例如:

var a = [1, 2, 3];
var b = a;
b.push(4);
alert(a);    //"1,2,3,4",alert取toString()值,a的值为[1, 2, 3,4]
alert(b);    //"1,2,3,4"

此时,a、b的值本质为引用的相同的地址,当地址内容改变,a、b同时改变。

这种现象同样适用于函数传参。例如:

var a = [1,2,3];
var b = 10;
function add(a,b){
    a.push(4);
    b++;
}

add(a,b);
alert(b);    //10
alert(a);    //[1,2,3,4]

作用域

JavaScript没用块级作用域。JS中依靠执行环境定义变量或函数的访问范围,作用域链等知识请自行查看w3
c标准。
JS中,var声明的变量会自动添加到接近的环境中,如果在函数中没用var声明,该变量会被直接添加到全局环境。
局部环境下查询标识符时,按照作用域链自下而上的查询,知道找到第一个标识符声明(var),若找不到,返回undefined。注意,未使用var声明的变量,在函数执行环境中改变时,不作为查询标识符,一定要查询到var声明处。
函数传递与全局变量同名参数时,相当于在给参数var声明。因此,函数中可以查寻到。

var a = 1;
 function add(a){
     a++;
 }

 add();
 alert(a);    //1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值